自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

C#算法應(yīng)用之高斯消元法實(shí)現(xiàn)

開發(fā) 后端 算法
C#算法應(yīng)用之高斯消元法實(shí)現(xiàn)是在工程學(xué)習(xí)中碰到的需要解決線性方程的問題,那么本文就向你介紹C#算法應(yīng)用之高斯消元法的實(shí)現(xiàn)問題。
C#算法應(yīng)用之高斯消元法實(shí)現(xiàn)是如何的呢?我們?cè)诠こ虒W(xué)習(xí)中經(jīng)常會(huì)碰到線性方程組的求解,那么以下就是C#算法應(yīng)用之高斯消元法實(shí)現(xiàn)代碼:
  1. // 程 序 名:GaussP1.cs  
  2. // 主要功能:利用高斯消元法求線性方程組的解  
  3. // 注意:  
  4. //     本程序詳細(xì)地給出了中間過程,以便在調(diào)試時(shí)分析解題過程,適合于教學(xué)。  
  5. // 適合于實(shí)際計(jì)算的另一個(gè)程序名為:GuassP1.pas  
  6.  
  7. using System;                                         // 引入System命名空間  
  8.  
  9. namespace GaussP1  
  10. {  
  11.   public class Program  
  12.   {  
  13.     public static void Main(string[] args)            // 主函數(shù)  
  14.     {                                                 // 主函數(shù)開始  
  15.       // 為了簡化程序,本例只考慮方程組有***解的情況,不對(duì)其它情況進(jìn)行判斷。  
  16.       // n是線性方程組的個(gè)數(shù),數(shù)組a是增廣矩陣,為了方便調(diào)試,在這里直接給n和  
  17.       // 數(shù)組a賦值,在實(shí)際使用過程中要通過鍵盤讀入它們的值  
  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.         // 若將下面兩個(gè)語句改為本語句,則程序會(huì)出錯(cuò),因?yàn)榻?jīng)過第1次循環(huán)  
  54.         // 后a[k,k]=1,a[k,k]的值發(fā)生了變化,所以在下面的語句中先用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消去法的主要區(qū)別就是在這一步,Gauss消去法是從k+1  
  62.         // 到n循環(huán),而Jordan消去法是從1到n循環(huá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列的主元素以及它所在的行號(hào)  
  86.       double t, mainElement;            // mainElement用于保存主元素的值  
  87.       int l;                            // 用于保存主元素所在的行號(hào)  
  88.  
  89.       // 從第k行到第n行尋找第k列的主元素,記下主元素mainElement和所在的行號(hào)l  
  90.       mainElement = Math.Abs(a[k, k]);  // 注意別忘了取絕對(duì)值  
  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;                        // 記下主元素所在的行號(hào)  
  98.         }  
  99.       }  
  100.  
  101.       // l是主元素所在的行。將l行與k行交換,每行前面的k個(gè)元素都是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#算法應(yīng)用之高斯消元法實(shí)現(xiàn)程序的運(yùn)行結(jié)果:

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

中間過程

增廣矩陣:

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#算法應(yīng)用之高斯消元法實(shí)現(xiàn)就向你介紹到這里,希望對(duì)你了解C#算法應(yīng)用以及高斯消元法的實(shí)現(xiàn)有所幫助。

【編輯推薦】

  1. C#算法解決張老師的生日問題
  2. C#算法解決的一道面試題
  3. C#算法實(shí)現(xiàn)字符串反轉(zhuǎn)淺析
  4. C#算法解決蘿卜地問題
  5. C#九九乘法表的實(shí)現(xiàn)淺析
責(zé)任編輯:仲衡 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2009-08-14 17:17:24

C#加框和消框

2009-08-17 13:07:27

C#馬賽克算法

2021-12-06 07:23:12

C# 過濾算法

2009-08-17 14:08:33

C#進(jìn)度條使用

2009-07-16 17:40:48

iBATIS高級(jí)查詢iBATIS使用

2009-08-14 16:46:44

C#元數(shù)據(jù)

2009-08-13 18:12:11

C#數(shù)據(jù)加密

2009-08-11 10:26:49

C#算法C#字符串反轉(zhuǎn)

2009-07-22 17:15:04

C#實(shí)現(xiàn)

2009-08-31 16:29:21

C#控制輸入法

2009-08-11 13:54:54

約瑟夫環(huán)算法C#算法

2009-08-07 17:57:26

C#定義事件應(yīng)用

2009-08-11 13:29:57

C#二叉樹遍歷

2009-09-09 18:41:42

C# 加密散列算法

2009-08-31 15:55:17

C#實(shí)現(xiàn)Strateg

2009-08-19 17:00:07

C#實(shí)現(xiàn)PrintPa

2009-08-20 14:22:17

C#實(shí)現(xiàn) Contro

2009-08-25 17:55:52

C#實(shí)現(xiàn)Strateg

2009-07-31 18:18:33

Camel命名法C#命名規(guī)范

2009-07-30 18:50:32

C#發(fā)送消息C#應(yīng)用程序
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)