level 7
不用检查程序,程序应该没问题的。就是不知道这种误差逐渐累加的情况怎么处理。
2011年05月24日 11点05分
4
level 14
一般解线性性方程组有以下几种:(以下为Matlab程序)
(1)高斯消元法
function x=SolveIPTriangle(A,b)
%求上三角形系数矩阵的线性方程组 Ax=b的解
%线性方程组的系数矩阵:A
%线性方程组的解: x
N=size(A);
n=N(1);
for i=n:-1:1
if(i<n)
s=A(i,(i+1):n)*x((i+1):n,1);
else
s=0;
end
x(i,1)=(b(i)-s)/A(i,i);
end
(2)高斯顺序消去法
function [x,XA]=GaussXQByOrder(A,b)
%高斯顺序消去法求线性方程组 Ax=b的解
%线性方程组的系数矩阵:A
%线性方程组的解:x
%消去后的系数矩阵:XA
N=size(A);
n=N(1);
for i=1:(n-1)
for j=(i+1):n
if(A(i,i)==0)
disp('对角线元素为0!');
return;
end
l=A(j,i);
m=A(i,i);
A(j,1:n)=A(j,1:n)-l*A(i,1:n)/m; %消元方程
b(j)=b(j)-l*b(i)/m;
end
end
x=SolveUpTriangle(A,b); %通用的求上三角系数矩阵线性方程组的函数
XA=A; %消元后的系数矩阵
2011年05月25日 10点05分
9
level 14
(3)高斯主元消去法
3.1 高斯按列主元消去法
function [x,XA]=GaussXQLineMain(A,b)
%高斯按列主元消去法求线性方程组 Ax=b 的解
%线性方程组中的系数矩阵:A
%线性方程组中的常数向量:b
%线性方程组的解:x
%消元后的系数矩阵: XA
N=size(A);
n=N(1);
index=0;
for i=1:(n-1)
me=max(abs(A(1:n,i))); %选取列主元
for k=i:n
if(abs(A(k,i))==me)
index=k; %保存列主元所在的行
break;
end
end
temp=A(i,1:n);
A(i,1:n)=A(index,1:n);
A(index,1:n)=temp;
bb=b(index);
b(index)=b(i);
b(i)=bb;
for j=(i+1):n
if(A(i,i)==0)
disp('对角元素为0!');
return;
end
l=A(j,i);
m=A(i,i);
A(j,1:n)=A(j,1:n)-l*A(i,1:n)/m;
b(j)=b(j)-l*b(i)/m; %消元
end
end
x=SolveUPTriangle(A,b);
XA=A;
3.2高斯全主元消去法
function [x,XA]=GaussXQALLMain(A,b)
%高斯全主元消去法求线性方程组Ax=b的解
%线性方程组的系数矩阵:A
%线性方程组中的常数向量:b
%线性方程组的解:x
%校园后的系数矩阵:XA
N=size(A);
n=N(1);
index_1=0;
index_r=0; %记录未知数顺序的向量
order =1:n;
for i=1:(n-1)
me =max(max(abs(A(i:n,i:n))));
for k=i:n
for r=i:n
if(abs(A(k,r))==me)
index_l=k;
index_r=r; %保存主元所在的行和列
k=n;
break;
end
end
end
temp=A(i,1:n);
A(i,1:n)=A(index_l,1:n);
A(index_l,1:n)=temp;
bb=b(index_l);
b(index_l)=b(i);
b(i)=bb; %交换主行
temp=A(1:n,i);
A(1:n,i)=A(1:n,index_r);
A(1:n,index_r)=temp; %交换主列
pos=order(i);
order(i)=order(index_r);
order(index_r)=pos; %主列的交换会造成未知数程序的变化
for j=(i+1):n
if(A(i,i)==0)
disp('对角元素为0!');
return;
end
l=A(j,i);
m=A(i,i);
A(j,l:n)=A(j,l:n)-l*A(i,l:n)/m;
b(j)=b(j)-l*b(i)/m;
end
end
x=SolveUPTriangle(A,b);
y=zeros(n,1);
for i=1:n
for j=1:n
if(order(j)==i)
y(i)=y(j);
end
end
end
x=y;
XA=A;
2011年05月25日 11点05分
10