高斯约当消去法

标签:
delphi高斯约当消去法 |
分类: 常用算法---Delphi代码 |
01 procedure TForm1.Gauss_Jordan(Var B:XValue;A:Matrix2;N:Integer);
//高斯约当消去法
02 //B是用来存放解的数组
A是方程组的增广矩阵,N是方程的个数,也就是系数矩阵的行。
03 Var
04 Row,Col:Integer;
05 i,j,k:Integer;
06 temp:real;
07 begin
08 Row:=N;
09 Col:=N+1;
10 for k:=0 to Row-1 do
11 begin
12
temp:=A[k][k];
//取出矩阵对角线上的值
13
for j:=k to Col-1 do A[k][j]:=A[k][j]/temp;
//将该行对角线上的元素化为1
14
for i:=0 to Row-1 do
//将每一行的第k列元素除对角线以外的元素都化为零
15
begin
16
if i=k then continue;
17
//当前将要被化为零的元素--注意K代表的是第K列是不变的也就是说第K列的所有元素除了主对角线上的元素都会被化为零
18
temp:=A[i][k];
19
for j:=k to Col-1 do
20
A[i][j]:=A[i][j]-temp*A[k][j];
//这就是我上面说的那个表达式的代码,在代入的过程中换算系数的值
21
end;
22 end;
23 for k:=0 to Row-1 do
24
B[k]:=A[k][col-1];
25 end;
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
注意:高斯约当消去法的前提是系数矩阵对角线上的值不能为零,从代码中也看的出来。高斯约当消去法在解一些小的方程组来说效果很好(少于20000至30000个未知数:对计算机来说这当然算未知数小的啦),但对于未知数很多的比如几十万甚至几百万个未知数的方程组就不行了。这就要用迭代法来解决了。