成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C#算法應用之高斯消元法實現

開發 后端 算法
C#算法應用之高斯消元法實現是在工程學習中碰到的需要解決線性方程的問題,那么本文就向你介紹C#算法應用之高斯消元法的實現問題。
C#算法應用之高斯消元法實現是如何的呢?我們在工程學習中經常會碰到線性方程組的求解,那么以下就是C#算法應用之高斯消元法實現代碼:
  1. // 程 序 名:GaussP1.cs  
  2. // 主要功能:利用高斯消元法求線性方程組的解  
  3. // 注意:  
  4. //     本程序詳細地給出了中間過程,以便在調試時分析解題過程,適合于教學。  
  5. // 適合于實際計算的另一個程序名為:GuassP1.pas  
  6.  
  7. using System;                                         // 引入System命名空間  
  8.  
  9. namespace GaussP1  
  10. {  
  11.   public class Program  
  12.   {  
  13.     public static void Main(string[] args)            // 主函數  
  14.     {                                                 // 主函數開始  
  15.       // 為了簡化程序,本例只考慮方程組有***解的情況,不對其它情況進行判斷。  
  16.       // n是線性方程組的個數,數組a是增廣矩陣,為了方便調試,在這里直接給n和  
  17.       // 數組a賦值,在實際使用過程中要通過鍵盤讀入它們的值  
  18.       int n = 3;   
  19.       double[,] a = {{2, -1, 3, 1}, {4, 2, 5, 4}, {1, 2, 0, 7}};  
  20.       double[] x = new double[n];  
  21.  
  22.       Gauss(n, a, x);  
  23.  
  24.       // 輸出方程組的解  
  25.       Console.WriteLine("方程組的解為:");  
  26.       for(int i = 0; i < n; i++) Console.Write("x({0})={1,8:F3} ", i, x[i]);  
  27.       Console.WriteLine();  
  28.     }  
  29.  
  30.     // 利用高斯消元法求線性方程組的解  
  31.     public static void Gauss(int n, double[,] a, double[] x)  
  32.     {  
  33.       double d;  
  34.  
  35.       Console.WriteLine("高斯消去法解方程組的中間過程");  
  36.       Console.WriteLine("============================");  
  37.       Console.WriteLine("中間過程");  
  38.       Console.WriteLine("增廣矩陣:");  
  39.       printArray(n, a); Console.WriteLine();  
  40.         
  41.       // 消元  
  42.       for(int k = 0; k < n; k++)  
  43.       {  
  44.         Console.WriteLine("第{0}步", k + 1);  
  45.         Console.WriteLine("初始矩陣:");  
  46.         printArray(n, a); Console.WriteLine();  
  47.  
  48.         selectMainElement(n, k, a); // 選擇主元素  
  49.         Console.WriteLine("選擇主元素后的矩陣:");  
  50.         printArray(n, a); Console.WriteLine();  
  51.  
  52.         // for (int j = k; j <= n; j++ ) a[k, j] = a[k, j] / a[k, k];  
  53.         // 若將下面兩個語句改為本語句,則程序會出錯,因為經過第1次循環  
  54.         // 后a[k,k]=1,a[k,k]的值發生了變化,所以在下面的語句中先用d  
  55.         // 將a[k,k]的值保存下來  
  56.         d = a[k, k];  
  57.         for (int j = k; j <= n; j++ ) a[k, j] = a[k, j] / d;  
  58.         Console.WriteLine("將第{0}行中a[{0},{0}]化為1后的矩陣:", k + 1);  
  59.         printArray(n, a); Console.WriteLine();  
  60.  
  61.         // Guass消去法與Jordan消去法的主要區別就是在這一步,Gauss消去法是從k+1  
  62.         // 到n循環,而Jordan消去法是從1到n循環,中間跳過第k行  
  63.         for(int i = k + 1; i < n; i++)  
  64.         {  
  65.            d = a[i, k];  // 這里使用變量d將a[i,k]的值保存下來的原理與上面注釋中說明的一樣  
  66.            for (int j = k; j <= n; j++) a[i, j] = a[i, j] - d * a[k, j];  
  67.         }  
  68.  
  69.         Console.WriteLine("消元后的矩陣:");  
  70.         printArray(n, a); Console.WriteLine();  
  71.       }  
  72.  
  73.       // 回代  
  74.       x[n - 1] = a[n - 1, n];  
  75.       for (int i = n - 1; i >= 0; i--)  
  76.       {  
  77.         x[i] = a[i, n];  
  78.         for (int j = i + 1; j < n; j++) x[i] = x[i] - a[i, j] * x[j];  
  79.       }  
  80.     }  
  81.  
  82.     // 選擇主元素  
  83.     public static void selectMainElement(int n, int k, double[,] a)  
  84.     {  
  85.       // 尋找第k列的主元素以及它所在的行號  
  86.       double t, mainElement;            // mainElement用于保存主元素的值  
  87.       int l;                            // 用于保存主元素所在的行號  
  88.  
  89.       // 從第k行到第n行尋找第k列的主元素,記下主元素mainElement和所在的行號l  
  90.       mainElement = Math.Abs(a[k, k]);  // 注意別忘了取絕對值  
  91.       l = k;  
  92.       for(int i = k + 1; i < n; i++)  
  93.       {  
  94.         if (mainElement < Math.Abs(a[i, k]))  
  95.         {  
  96.           mainElement = Math.Abs(a[i, k]);  
  97.           l = i;                        // 記下主元素所在的行號  
  98.         }  
  99.       }  
  100.  
  101.       // l是主元素所在的行。將l行與k行交換,每行前面的k個元素都是0,不必交換  
  102.       if (l != k)  
  103.       {  
  104.         for (int j = k; j <= n; j++)  
  105.         {   
  106.           t = a[k, j]; a[k, j] = a[l, j]; a[l, j] = t;  
  107.         }  
  108.       }  
  109.     }  
  110.  
  111.     // 打印矩陣  
  112.     public static void printArray(int n, double[,] a)  
  113.     {  
  114.       for(int i = 0; i < n; i++)  
  115.       {  
  116.         for (int j = 0; j <= n; j++ ) Console.Write("{0,10:F6} ", a[i, j]);  
  117.         Console.WriteLine();  
  118.       }  
  119.     }  
  120.   }  

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#算法應用之高斯消元法實現就向你介紹到這里,希望對你了解C#算法應用以及高斯消元法的實現有所幫助。

【編輯推薦】

  1. C#算法解決張老師的生日問題
  2. C#算法解決的一道面試題
  3. C#算法實現字符串反轉淺析
  4. C#算法解決蘿卜地問題
  5. C#九九乘法表的實現淺析
責任編輯:仲衡 來源: 互聯網
相關推薦

2009-08-14 17:17:24

C#加框和消框

2009-08-17 14:08:33

C#進度條使用

2009-08-17 13:07:27

C#馬賽克算法

2021-12-06 07:23:12

C# 過濾算法

2009-07-16 17:40:48

iBATIS高級查詢iBATIS使用

2009-08-14 16:46:44

C#元數據

2009-07-22 17:15:04

C#實現

2009-08-11 10:26:49

C#算法C#字符串反轉

2009-08-13 18:12:11

C#數據加密

2009-08-07 17:57:26

C#定義事件應用

2009-08-31 16:29:21

C#控制輸入法

2009-08-11 13:54:54

約瑟夫環算法C#算法

2009-08-11 13:29:57

C#二叉樹遍歷

2009-09-09 18:41:42

C# 加密散列算法

2009-08-31 15:55:17

C#實現Strateg

2009-08-19 17:00:07

C#實現PrintPa

2009-08-20 14:22:17

C#實現 Contro

2009-08-25 17:55:52

C#實現Strateg

2009-08-04 17:08:12

C# Thread類

2009-08-17 17:49:20

C# 枚舉
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 天天躁日日躁性色aⅴ电影 免费在线观看成年人视频 国产欧美精品 | 四虎永久在线精品免费一区二 | 狠狠操你 | 国产精品无码专区在线观看 | 波多野结衣中文字幕一区二区三区 | 亚洲综合色站 | 亚洲性视频网站 | 久久久.com | 奇米av| 精品久久久久久亚洲综合网 | 亚洲一区二区三区在线免费 | 成人精品一区二区三区 | 国产成人99久久亚洲综合精品 | 在线视频中文字幕 | 亚洲毛片在线观看 | 国产精品美女在线观看 | 亚洲逼院 | 亚洲精品中文字幕中文字幕 | 成人av电影天堂 | 久久91精品国产一区二区 | 天天草天天干 | 亚洲精品一区二三区不卡 | 色婷婷国产精品 | 国产精品久久久久久久久久免费 | 中文字幕日韩欧美一区二区三区 | 一级黄色片网站 | 99久久免费精品国产男女高不卡 | 国产一区二区在线播放视频 | 久久久久久久久久性 | 成人免费黄视频 | 夜夜艹| 日日骚视频 | 日韩成人性视频 | 成人18亚洲xxoo | 精品一二三区在线观看 | 一区在线免费视频 | 欧美日韩最新 | 国产精品精品视频一区二区三区 | 日本精品一区二区三区在线观看视频 | 欧美成人高清视频 | 美女毛片免费看 |