最近數值計算學了guass列主消元法和三角分解法解線性方程組,具體原理如下:
1、guass
列選主元消去法對於ax =b
1)、消元過程:將(a|b)進行變換為
,其中是上三角矩陣。即:
k從1到n-1
a、 列選主元
選取第k
列中絕對值最大元素
作為主元。
b、 換行
c、 歸一化
d、 消元
2)、回代過程:由解出。
2、三角分解法(doolittle分解)
將a分解為如下形式
由矩陣乘法原理
a、計算
u的第一行,再計算
l的第一列
b、設已求出u的
1至r-1行,l的
1至r-1列。先計算u的第
r行,再計算l的第
r列。a)計算u的
r行b)計算l的
r列
c#**:
**說明:guass列主消元法部分將計算出來的根仍然儲存在增廣矩陣的最後一列,而doolittle分解,將分解後的結果也儲存至原來的陣列中,這樣可以節約空間。。
using system;執行截圖:using system.windows.forms;
namespace test
private void cannel_button_click(object sender, eventargs e)
public double[,] getnum(string str, int n)
}return a;
}public void gauss(double[,] a, int n)
}//選擇列主元並進行消元
public void selectcole(double[,] a, int n)
}return;
}public void swaprow(double[,] a, int m, int maxrowe, int n)
}public void doolittle(double[,] a, int n)
else
a[i, j] = a[i, j] - temp;
}for (int j = i + 1; j < n; j++)
a[j, i] = (a[j, i] - s) / a[i, i];}}
}}private void exit_button_click(object sender, eventargs e)
private void confirm_button_click(object sender, eventargs e)
else
this.textbox1.clear();
}private void calculate_button_click(object sender, eventargs e)
}else if (this.combobox1.text == "doolittle三角分解法")
else if (i == j)
else
}this.textbox3.text += "\r\n";
}this.textbox3.text += "\r\nu矩陣:\r\n";
for (int i = 0; i < this.textbox2.lines.getupperbound(0) + 1; i++)
else
}this.textbox3.text += "\r\n";}}
}private void textbox1_keydown(object sender, keyeventargs e)
else}}
private void button1_click(object sender, eventargs e)}}
至此完畢。。。。
高斯消去法與列主元消去法
兩種消去法的實現主要是,通過函式的實現,傳入引數來實現的。如有其他需要,請另行修改 function time gauss n,a,b b a b tic for k 1 n 1 if a k,k 0 disp the matrix has too many answers,please chang...
列主元高斯消去法(C語言)
高斯消元法是將方程組中的一方程的未知數用含有另一未知數的代數式表示,並將其代人到另一方程中,這就消去了一未知數,得到一解 或將方程組中的一方程倍乘某個常數加到另外一方程中去,也可達到消去一未知數的目的。消元法主要用於二元一次方程組的求解。核心 1 兩方程互換,解不變 2 一方程乘以非零數k,解不變 ...
列主元Gauss消去法 C 實現
原理 列主元素消去法是為控制捨入誤差而提出來的一種演算法,列主元素消去法計算基本上能控制捨入誤差的影響,其基本思想是 在進行第 k k 1,2,n 1 步消元時,從第k列的 akk及其以下的各元素中選取絕對值最大的元素,然後通過行變換將它交換到主元素akk的位置上,再進行消元。列主元消去法的基本思想...