乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      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('無解或多個(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)購買等信息,謹(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)論公約

        類似文章 更多