Gauss消去法等matlab程序.doc
文本预览下载声明
实验题目 编写四个解线性方程组的程序 评 分 1、设计(实习)目的:
了解MATLAB在实际问题中的应用
通过实践加深对这门语言中M文件的了解
掌握运用matlab解决实际数学问题
2、实验内容:
运用matlab编写程序:
Gauss消去法
列主元消去法
LU三角分解法
3.详细设计:
由于以下四种消元法均含有回代与逆回代过程,因此事先编写的子文件如下:
Huidai.M文件:
function x=huidai(a)
n=length(a)-1;
for i=n:-1:1
s=0;
if i==n
x(i)=(a(n,n+1)-s)/a(n,n);
else
for j=n:-1:i
s=s+a(i,j)*x(j);
end
x(i)=(a(i,n+1)-s)/a(i,i);
end
end
huidai.M文件:
function x=huidaini(a)
n=length(a)-1;
x=zeros(n,1);
s=0;
for i=1:1:n
if i==1
x(1)=a(1,n+1)/a(1,1)
else
for j=1:1:i-1
s=s+a(i,j)*x(j)
end
x(i)=(a(i,n+1)-s)/a(i,i)
s=0
end
end
1.)Gauss消去法:
function x=Gauss(A,b)
a=[A b];
x=[];
n=length(a)-1;
for k=1:n
for i=k+1:n
c=a(i,k)/a(k,k);
for j=k:n+1
a(i,j)=a(i,j)-c*a(k,j)
end
end
end
x=huidai(a);
2.)列主元消去法:
function x=GaussL(A,b)
a=[A b];
x=[];
n=length(a)-1;
for k=1:n
A=a(k:n,k);
h=max(A);
[u,v]=find(A==h);
u=u+k-1;
B=a;
a(k,:)=B(u,:);
a(u,:)=B(k,:);
for i=k+1:n
c=a(i,k)/a(k,k);
for j=k:n+1
a(i,j)=a(i,j)-c*a(k,j)
end
end
end
x=huidai(a);
3.)三角分解法:
function x=LU(A,b)
n=length(A)
A=[A b]
L=eye(n)
U=zeros(n)
for i=1:n-1
for j=i:n-1
L(j+1,i)=A(j+1,i)/A(i,i)
A(j+1,:)=A(j+1,:)-L(j+1,i)*A(i,:)
end
end
U=A(:,1:n)
a1=[L b]
y=zeros(n,1)
y=huidaini(a1)
a2=[U y]
x=huidai(a2)
4:实验结果:
1.)Gauss消去法:
A=[2 2 3;4 7 7;-2 4 5];b=[3;1;-7];
Gauss(A,b)
ans =
2 -2 1
2.)列主元消去法:
A=[2 2 3;4 7 7;-2 4 5];b=[3;1;-7];
GaussL(A,b)
ans =
2.0000 -2.0000 1.0000
3.)三角分解法:
A=[2 2 3;4 7 7;-2 4 5];b=[3;1;-7];
LU(A,b)
ans =
2 -2 1 5:实验总结
又一次用matlab解决数学问题,感觉好多东西都忘了,看来还要仔细看下书了,在解决以上问题时发现有共同的回代与逆回代过程,所以以子程序来简化m文件,在解决问题时细心分析就会简化问题。
显示全部