中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#中高斯消元法的實現方法

發布時間:2021-07-15 18:39:46 來源:億速云 閱讀:261 作者:chen 欄目:編程語言

這篇文章主要介紹“C#中高斯消元法的實現方法”,在日常操作中,相信很多人在C#中高斯消元法的實現方法問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”C#中高斯消元法的實現方法”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

C#算法應用之高斯消元法實現是如何的呢?我們在工程學習中經常會碰到線性方程組的求解,那么以下就是C#算法應用之高斯消元法實現代碼:

// 程 序 名:GaussP1.cs  // 主要功能:利用高斯消元法求線性方程組的解  // 注意:  //     本程序詳細地給出了中間過程,以便在調試時分析解題過程,適合于教學。  // 適合于實際計算的另一個程序名為:GuassP1.pas   using System;                                         // 引入System命名空間   namespace GaussP1  {    public class Program    {      public static void Main(string[] args)            // 主函數      {                                                 // 主函數開始        // 為了簡化程序,本例只考慮方程組有***解的情況,不對其它情況進行判斷。        // n是線性方程組的個數,數組a是增廣矩陣,為了方便調試,在這里直接給n和        // 數組a賦值,在實際使用過程中要通過鍵盤讀入它們的值        int n = 3;         double[,] a = {{2, -1, 3, 1}, {4, 2, 5, 4}, {1, 2, 0, 7}};        double[] x = new double[n];         Gauss(n, a, x);         // 輸出方程組的解        Console.WriteLine("方程組的解為:");        for(int i = 0; i < n; i++) Console.Write("x({0})={1,8:F3} ", i, x[i]);        Console.WriteLine();      }       // 利用高斯消元法求線性方程組的解      public static void Gauss(int n, double[,] a, double[] x)      {        double d;         Console.WriteLine("高斯消去法解方程組的中間過程");        Console.WriteLine("============================");        Console.WriteLine("中間過程");        Console.WriteLine("增廣矩陣:");        printArray(n, a); Console.WriteLine();                // 消元        for(int k = 0; k < n; k++)        {          Console.WriteLine("第{0}步", k + 1);          Console.WriteLine("初始矩陣:");          printArray(n, a); Console.WriteLine();           selectMainElement(n, k, a); // 選擇主元素          Console.WriteLine("選擇主元素后的矩陣:");          printArray(n, a); Console.WriteLine();           // for (int j = k; j <= n; j++ ) a[k, j] = a[k, j] / a[k, k];          // 若將下面兩個語句改為本語句,則程序會出錯,因為經過第1次循環          // 后a[k,k]=1,a[k,k]的值發生了變化,所以在下面的語句中先用d          // 將a[k,k]的值保存下來          d = a[k, k];          for (int j = k; j <= n; j++ ) a[k, j] = a[k, j] / d;          Console.WriteLine("將第{0}行中a[{0},{0}]化為1后的矩陣:", k + 1);          printArray(n, a); Console.WriteLine();           // Guass消去法與Jordan消去法的主要區別就是在這一步,Gauss消去法是從k+1          // 到n循環,而Jordan消去法是從1到n循環,中間跳過第k行          for(int i = k + 1; i < n; i++)          {             d = a[i, k];  // 這里使用變量d將a[i,k]的值保存下來的原理與上面注釋中說明的一樣             for (int j = k; j <= n; j++) a[i, j] = a[i, j] - d * a[k, j];          }           Console.WriteLine("消元后的矩陣:");          printArray(n, a); Console.WriteLine();        }         // 回代        x[n - 1] = a[n - 1, n];        for (int i = n - 1; i >= 0; i--)        {          x[i] = a[i, n];          for (int j = i + 1; j < n; j++) x[i] = x[i] - a[i, j] * x[j];        }      }       // 選擇主元素      public static void selectMainElement(int n, int k, double[,] a)      {        // 尋找第k列的主元素以及它所在的行號        double t, mainElement;            // mainElement用于保存主元素的值        int l;                            // 用于保存主元素所在的行號         // 從第k行到第n行尋找第k列的主元素,記下主元素mainElement和所在的行號l        mainElement = Math.Abs(a[k, k]);  // 注意別忘了取絕對值        l = k;        for(int i = k + 1; i < n; i++)        {          if (mainElement < Math.Abs(a[i, k]))          {            mainElement = Math.Abs(a[i, k]);            l = i;                        // 記下主元素所在的行號          }        }         // l是主元素所在的行。將l行與k行交換,每行前面的k個元素都是0,不必交換        if (l != k)        {          for (int j = k; j <= n; j++)          {             t = a[k, j]; a[k, j] = a[l, j]; a[l, j] = t;          }        }      }       // 打印矩陣      public static void printArray(int n, double[,] a)      {        for(int i = 0; i < n; i++)        {          for (int j = 0; j <= n; j++ ) Console.Write("{0,10:F6} ", a[i, j]);          Console.WriteLine();        }      }    }  }

C#算法應用之高斯消元法實現程序的運行結果:

高斯消去法解方程組的中間過程
中間過程

增廣矩陣:

2.000000 -1.000000  3.000000  1.000000

4.000000  2.000000  5.000000  4.000000

1.000000  2.000000  0.000000  7.000000

第1步

初始矩陣:

2.000000 -1.000000  3.000000  1.000000

4.000000  2.000000  5.000000  4.000000

1.000000  2.000000  0.000000  7.000000

選擇主元素后的矩陣:
4.000000  2.000000  5.000000  4.000000

2.000000 -1.000000  3.000000  1.000000

1.000000  2.000000  0.000000  7.000000

將第1行中a[1,1]化為1后的矩陣

1.000000  0.500000  1.250000  1.000000

2.000000 -1.000000  3.000000  1.000000

1.000000  2.000000  0.000000  7.000000

消元后的矩陣

1.000000  0.500000  1.250000  1.000000

0.000000 -2.000000  0.500000 -1.000000

0.000000  1.500000 -1.250000  6.000000

第2步

初始矩陣:

1.000000  0.500000  1.250000  1.000000

0.000000 -2.000000  0.500000 -1.000000

0.000000  1.500000 -1.250000  6.000000

選擇主元素后的矩陣:

1.000000  0.500000  1.250000  1.000000

0.000000 -2.000000  0.500000 -1.000000

0.000000  1.500000 -1.250000  6.000000

將第2行中a[2,2]化為1后的矩陣

1.000000  0.500000  1.250000  1.000000

0.000000  1.000000 -0.250000  0.500000

0.000000  1.500000 -1.250000  6.000000

消元后的矩陣

1.000000  0.500000  1.250000  1.000000

0.000000  1.000000 -0.250000  0.500000

0.000000  0.000000 -0.875000  5.250000

第3步

初始矩陣:

1.000000  0.500000  1.250000  1.000000

0.000000  1.000000 -0.250000  0.500000

0.000000  0.000000 -0.875000  5.250000

選擇主元素后的矩陣:

1.000000  0.500000  1.250000  1.000000

0.000000  1.000000 -0.250000  0.500000

0.000000  0.000000 -0.875000  5.250000

將第3行中a[3,3]化為1后的矩陣

1.000000  0.500000  1.250000  1.000000

0.000000  1.000000 -0.250000  0.500000

0.000000  0.000000  1.000000 -6.000000

消元后的矩陣

1.000000  0.500000  1.250000  1.000000

0.000000  1.000000 -0.250000  0.500000

0.000000  0.000000  1.000000 -6.000000

方程組的解為:

x(1)=9.000  x(2)=-1.000  x(3)=-6.000

到此,關于“C#中高斯消元法的實現方法”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

桦川县| 马龙县| 苍溪县| 临夏市| 岚皋县| 田阳县| 南乐县| 新巴尔虎左旗| 洪雅县| 信丰县| 克什克腾旗| 东乌珠穆沁旗| 承德市| 大渡口区| 巩义市| 保定市| 凤冈县| 达拉特旗| 马山县| 孟村| 伽师县| 阿拉善左旗| 宣威市| 扎兰屯市| 白城市| 雷州市| 靖边县| 奎屯市| 哈巴河县| 正蓝旗| 中超| 额敏县| 河曲县| 河北省| 内江市| 全南县| 库车县| 珠海市| 保德县| 凭祥市| 秦皇岛市|