朴素高斯消元
program ttdd8;
var matrix:array[1..100,1..101] of double;
temp:array[1..101] of double;
x:array[1..100] of double;
i,j,k,n:integer;
m:double;
begin
readln(n);{一共有n个式子}
for i:=1 to n do
begin
for j:=1 to n+1 do
read(matrix[i,j]);{依次读入每个式子x1,x2…的系数及常数项}
readln;
end;
for i:=1 to n-1 do{需要消元n-1次}
begin
for j:=i to n do{寻找主元,即当前要消去元素系数最大的一个式子}
if matrix[j,i]>matrix[i,i] then
begin
temp:=matrix[i];
matrix[i]:=matrix[j];
matrix[j]:=temp;
end;
for j:=i+1 to n do
begin
m:=matrix[j,i]/matrix[i,i];
matrix[j,i]:=0;
for k:=i+1 to n+1 do
matrix[j,k]:=matrix[i,k]*m-matrix[j,k];
end;
end;
x[n]:=matrix[n,n+1]/matrix[n,n];{回代过程}
for i:=n-1 downto 1 do
begin
m:=0;
for j:=i+1 to n do
m:=m+matrix[i,j]*x[j];
x[i]:=(matrix[i,n+1]-m)/matrix[i,i];
end;
for i:=1 to n do
writeln(x[i]:0:2);
end.
转自zkw的blog
高斯消元法是求解线性方程组的常用方法,高斯约当消元法大家可能不是很熟悉。下面先介绍线性方程组和矩阵的一些基本概念与高斯消元法,然后着重介绍高斯约当消元法相对于高斯消元法的优势:程序简单(不需要回代),应用广泛(例如求矩阵的逆),易于判断处理特殊情况(有无穷多解的情况)。
这是一个线性方程组: