public?class?Arranger?{
成都創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括晉中網(wǎng)站建設(shè)、晉中網(wǎng)站制作、晉中網(wǎng)頁制作以及晉中網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,晉中網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到晉中省份的部分城市,未來相信會繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
private?double[][]?arrangerMatrix;
private?double?arrangerResult=1.0;
public?static?void?main(String?args[]){
double[][]?a={{4,1,4,8},{1,1,3,2},{2,2,5,1},{2,2,1,4}};
Arranger?ar=new?Arranger();
ar.arrFunction(a);//把行列式變成上三角行列式
ar.displayMatrix();//顯示得出的上三角行列式
ar.displayResult();?//顯示行列式計(jì)算結(jié)果
}
public?void?arrFunction(double[][]?a){//Guass?消去
double?k=0;
for?(int?p?=?0;?pa[0].length-1;?p++)?{
for?(int?r?=p+1;?ra.length;?r++)?{
k=a[r][p]/a[p][p];
a[r][p]=0;
for?(int?c?=?p+1;?ca[0].length;?c++)?{
a[r][c]=a[r][c]-k*a[p][c];
}//u
}//r
}//c
arrangerMatrix=new?double[a.length][a[0].length];
for?(int?i?=?0;?ia.length;?i++)?{
for?(int?j?=?0;?ja[0].length;?j++)?{
arrangerMatrix[i][j]=a[i][j];
if?(i==j)?{arrangerResult=arrangerResult*a[i][j];}//計(jì)算主對角線相乘的結(jié)果
//System.out.println?(a[i][j]+"?");
}//j
}//i
}
public?void?displayMatrix(){
for?(int?i?=?0;?iarrangerMatrix.length;?i++)?{
for?(int?j?=?0;?jarrangerMatrix[0].length;?j++)?{
System.out.print?(arrangerMatrix[i][j]+"?");
}//j
System.out.println?();
}//i
}
public?void?displayResult(){
System.out.println?("The?result?is?"+arrangerResult);
}
}
思路應(yīng)該很簡單,考慮如何抽象類,矩陣如何存儲的數(shù)據(jù)結(jié)構(gòu)如何表示(此處不建議使用數(shù)組,建議使用相關(guān)的容器,比如嵌套的ArrayListArrayListDouble, 類存儲數(shù)據(jù)),容器類更方便的實(shí)現(xiàn)你說的3中的刪除一行,不過刪除列需要一些額外處理。
目標(biāo)函數(shù),應(yīng)該不多,建議百度一下,有沒有java實(shí)現(xiàn)的關(guān)于數(shù)學(xué)運(yùn)算的第三方j(luò)ar包,這樣的話,你只要稍微封裝一下即可。
見第一
如果使用容器,因?yàn)槿萜魇莿討B(tài)的,不是數(shù)組的靜態(tài),也即是說,數(shù)據(jù)的多少對程序的影響是微小的。
希望上邊的答復(fù)可以幫助到你。
這個用個循環(huán)遞歸就好了。先寫個從n階,以及位置(x,y)得到n-1階的函數(shù),然后用那個公式直接代入一個遞歸就行了。
/**
?*?矩陣乘法
?*?@param?a
?*?@param?b
?*?@return
?*/
public?static?double[][]?mulMatrix(double[][]?a,double[][]?b){
?double[][]?c=new?double[a.length][b[0].length];
?//相乘的兩個行列式需要滿足,第一個行列式的列于第二個行列式的行相等
?if(a[0].length!=b.length){
?System.out.println("Wrong?parameters.");
?return?c;
?}
?//若A為mXn矩陣,B為nXp矩陣,返回一個mXp的矩陣
?for?(int?i?=?0;?i??c.length;?i++)?{
for?(int?j?=?0;?j??c[0].length;?j++)?{
for?(int?j2?=?0;?j2??a[0].length;?j2++)?{
c[i][j]=c[i][j]+a[i][j2]*b[j2][j];
}
}
}
?return?c;
}
/**
?*?計(jì)算行列式的值
?*?@param?a
?*?@return
?*/
static?double?determinant(double[][]?a){
double?result2?=?0;
if(a.length2){
?//每次選擇第一行展開
for(int?i=0;ia[0].length;i++){
//系數(shù)符號
double?f=Math.pow(-1,i);
//求余子式
double[][]?yuzs=new?double[a.length-1][a[0].length-1];
for?(int?j?=?0;?j??yuzs.length;?j++)?{
for?(int?j2?=?0;?j2??yuzs[0].length;?j2++)?{
//去掉第一行,第i列之后的行列式即為余子式
if(j2i){
yuzs[j][j2]=a[j+1][j2];
}else?{
yuzs[j][j2]=a[j+1][j2+1];
}
}
}?
//行列式的拉普拉斯展開式,遞歸計(jì)算
result2+=a[0][i]*determinant(yuzs)*f;
}
}
else{
//兩行兩列的行列式使用公式
if(a.length==2){
result2=a[0][0]*a[1][1]-a[0][1]*a[1][0];
}
//單行行列式的值即為本身
else{
result2=a[0][0];
}
}
return?result2;
}
轉(zhuǎn)自
分享題目:java行列式計(jì)算源代碼 行列的代碼
文章地址:http://www.rwnh.cn/article22/dosijcc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)、定制開發(fā)、域名注冊、網(wǎng)站策劃、建站公司、虛擬主機(jī)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)