日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

java解四元一次方程

 啟云_9137 2022-06-21 發(fā)布于湖南

問題:求解四元一次方程,例如

       x+y-z=9;

       x-y+2z=8;

       2x+y-z=7;

       x+y+z=m;

這個(gè)解是 x=-2.0 y=32.0 z=21.0 m=51.0

 如果你想利用迭代暴力計(jì)算的話,不用試了,我替你試過了,太慢,慢的一天你也解不出來,比如x,y,z,m的范圍是從-2.0到51.0

那么解決不了了嗎?這時(shí)腦海中依稀想起來了大學(xué)學(xué)過線性代數(shù),于是乎找美麗的度娘親熱了大半個(gè)下午,終于把線性代數(shù)部分知識(shí)拾起來了點(diǎn) o(╯□╰)o

順便也幫大家溫習(xí)下,先來個(gè)入門簡(jiǎn)單的
PS:或許好多客官認(rèn)為這個(gè)溫習(xí)沒必要,傻逼才看呢,可是我想說,等你想拓展這個(gè)程序,想要解5元一次方程,n元一次方程的時(shí)候,你絕對(duì)用得著。但是如果你精通高數(shù),線性代數(shù)的話,算我沒說閉嘴。。。

然后再看下克拉默法則:


然后再看看代數(shù)余子式:


汗,最后步入正題,代碼就簡(jiǎn)單了,其實(shí)就是套公式,看代碼吧。。。

(注意要解的方程組把變量都放到左邊,常亮放到右邊,然后再寫strss這個(gè)二維數(shù)組)


/**
 * 解四元一次方程
 * @author liuyj
 */
public class ArithmeticOfCalcFour {

public static void main(String[] args) {
// 例子
// x+y-z=9;
// x-y+2z=8;
// 2x+y-z=7;
// x+y+z=m;
// 解x=-2,y=32,z=21,m=51
double[][] strss={
{1,1,-1,0,9},
    {1,-1,2,0,8},
    {2,1,-1,0,7},
    {1,1,1,-1,0},
      };
calculate(strss);

}

public static void calculate(double[][] strss) {

double[][] dss={
{strss[0][0],strss[0][1],strss[0][2],strss[0][3]},
{strss[1][0],strss[1][1],strss[1][2],strss[1][3]},
{strss[2][0],strss[2][1],strss[2][2],strss[2][3]},
{strss[3][0],strss[3][1],strss[3][2],strss[3][3]}
};
double[][] d1ss={
{strss[0][4],strss[0][1],strss[0][2],strss[0][3]},
{strss[1][4],strss[1][1],strss[1][2],strss[1][3]},
{strss[2][4],strss[2][1],strss[2][2],strss[2][3]},
{strss[3][4],strss[3][1],strss[3][2],strss[3][3]}
};
double[][] d2ss={
{strss[0][0],strss[0][4],strss[0][2],strss[0][3]},
{strss[1][0],strss[1][4],strss[1][2],strss[1][3]},
{strss[2][0],strss[2][4],strss[2][2],strss[2][3]},
{strss[3][0],strss[3][4],strss[3][2],strss[3][3]}
};
double[][] d3ss={
{strss[0][0],strss[0][1],strss[0][4],strss[0][3]},
{strss[1][0],strss[1][1],strss[1][4],strss[1][3]},
{strss[2][0],strss[2][1],strss[2][4],strss[2][3]},
{strss[3][0],strss[3][1],strss[3][4],strss[3][3]}
};
double[][] d4ss={
{strss[0][0],strss[0][1],strss[0][2],strss[0][4]},
{strss[1][0],strss[1][1],strss[1][2],strss[1][4]},
{strss[2][0],strss[2][1],strss[2][2],strss[2][4]},
{strss[3][0],strss[3][1],strss[3][2],strss[3][4]}
};

double d=calculateFour(dss);
if(d==0){
System.out.println('無(wú)解或多個(gè)解');
return ;
}
double d1=calculateFour(d1ss);
double d2=calculateFour(d2ss);
double d3=calculateFour(d3ss);
double d4=calculateFour(d4ss);

double x=d1/d;
double y=d2/d;
double z=d3/d;
double m=d4/d;
System.out.println('結(jié)果:x='+x+' y='+y+' z='+z+' m='+m);
System.out.println('計(jì)算完畢!');
}

/**
* 計(jì)算4階線性方程組
* @param strss
* @return
*/
private static double calculateFour(double[][] strss) {

// {strss[0][0],strss[0][1],strss[0][2],strss[0][3]},
// {strss[1][0],strss[1][1],strss[1][2],strss[1][3]},
// {strss[2][0],strss[2][1],strss[2][2],strss[2][3]},
// {strss[3][0],strss[3][1],strss[3][2],strss[3][3]}

double[][] t00={
{strss[1][1],strss[1][2],strss[1][3]},
{strss[2][1],strss[2][2],strss[2][3]},
{strss[3][1],strss[3][2],strss[3][3]}
};
double[][] t01={
{strss[1][0],strss[1][2],strss[1][3]},
{strss[2][0],strss[2][2],strss[2][3]},
{strss[3][0],strss[3][2],strss[3][3]}
};
double[][] t02={
{strss[1][0],strss[1][1],strss[1][3]},
{strss[2][0],strss[2][1],strss[2][3]},
{strss[3][0],strss[3][1],strss[3][3]}
};
double[][] t03={
{strss[1][0],strss[1][1],strss[1][2]},
{strss[2][0],strss[2][1],strss[2][2]},
{strss[3][0],strss[3][1],strss[3][2]}
};
double result=Math.pow(-1, 0+0)*strss[0][0]*calculateThree(t00) + Math.pow(-1, 0+1)*strss[0][1]*calculateThree(t01) + 
Math.pow(-1, 0+2)*strss[0][2]*calculateThree(t02) + Math.pow(-1, 0+3)*strss[0][3]*calculateThree(t03) ;

return result;
}


/**
* 計(jì)算3階行列式
* @param strss
* @return
*/
private static double calculateThree(double[][] strss) {
// {strss[0][0],strss[0][1],strss[0][2]
// {strss[1][0],strss[1][1],strss[1][2]
// {strss[2][0],strss[2][1],strss[2][2]

double result=strss[0][0]*strss[1][1]*strss[2][2] +  strss[0][1]*strss[1][2]*strss[2][0] +  strss[0][2]*strss[1][0]*strss[2][1] +  
-strss[0][2]*strss[1][1]*strss[2][0] - strss[0][1]*strss[1][0]*strss[2][2] - strss[0][0]*strss[2][1]*strss[1][2] ;

return result;
}

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多