数值分析上机实验3.docx
《数值分析上机实验3.docx》由会员分享,可在线阅读,更多相关《数值分析上机实验3.docx(12页珍藏版)》请在冰豆网上搜索。
数值分析上机实验3
昆明理工大学理学院
信息与计算科学专业操作性实验报告
年级:
10级姓名:
刘陈学号:
201011101128指导教师:
陈智斌
实验课程名称:
数值分析matlab程序设计开课实验室:
理学院机房
实验成绩:
学风(5)
观察能力(15)
操作能力(30)
调试能力(50)
其它
总分
实验内容:
1.实验/作业题目:
数值分析与matlab程序设计
2.实验/作业课时:
2学时
3.实验过程(包括实验环境、实验内容的描述、完成实验要求的知识或技能):
实验环境:
matlab
实验内容:
1.列主元消去法求L矩阵,U矩阵,P矩阵,det(A)和解向量X的值。
通过实验,掌握matlab列主元消去法操作。
2.ImplementtheGaussianeliminationwithpartialpivotingandsolvethefollowingsystemsoflinearequations:
(i)
=
(ii)
=
(iii)
=
Requirement:
(1)OutputtheLUdecompositionofthecoefficientmatrixA,i.e.,LandUsuchthatPA=LU.
(2)OutputthesolutionX=A−1b.
(3)Outputdet(A).
完成实验要求的知识或技能:
通过这个实验,了解matlab开发环境的配置以及如何通过matlab来编写《数值分析》程序,掌握matlab程序的一些基本结构。
4.程序结构(程序中的函数调用关系图)
5.算法描述、流程图或操作步骤:
高斯列主元消去法M文件算法:
function[l,u,p]=Gauss_x(A,b)
[m,n]=size(A);
ifm~=n
error('矩阵不是方阵')
return
end
ifdet(A)==0
error('矩阵不能被三角分解')
end
u=A;p=eye(m);l=eye(m);
fori=1:
m
forj=i:
m
t(j)=u(j,i);
fork=1:
i-1
t(j)=t(j)-u(j,k)*u(k,i);
end
end
a=i;B=abs(t(i));
forj=i+1:
m
ifBB=abs(t(j));
a=j;
end
end
ifa~=i
forj=1:
m
c=u(i,j);
u(i,j)=u(a,j);
u(a,j)=c;
end
forj=1:
m
c=p(i,j);
p(i,j)=p(a,j);
p(a,j)=c;
end
c=t(a);
t(a)=t(i);
t(i)=c;
end
u(i,i)=t(i);
forj=i+1:
m
u(j,i)=t(j)/t(i);
end
forj=i+1:
m
fork=1:
i-1
u(i,j)=u(i,j)-u(i,k)*u(k,j);
end
end
end
l=tril(u,-1)+eye(m);
u=triu(u,0);
detA=det(A);%求行列式A的值
detA%显示行列式A的值
n=length(b);
X=zeros(n,1);
c=zeros(1,n);
d1=0;
fori=1:
n-1
max=abs(A(i,i));
m=i;
forj=i+1:
n
ifmaxmax=abs(A(j,i));
m=j;
end
end
if(m~=i)
fork=i:
n
c(k)=A(i,k);
A(i,k)=A(m,k);
A(m,k)=c(k);
end
d1=b(i);
b(i)=b(m);
b(m)=d1;
end
fork=i+1:
n
forj=i+1:
n
A(k,j)=A(k,j)-A(i,j)*A(k,i)/A(i,i);
end
b(k)=b(k)-b(i)*A(k,i)/A(i,i);
A(k,i)=0;
end
end
X(n)=b(n)/A(n,n);%回代求解
fori=n-1:
-1:
1
sum=0;
forj=i+1:
n
sum=sum+A(i,j)*X(j);
end
X(i)=(b(i)-sum)/A(i,i);
end
X=X';%求出x
X%显示解向量x
上面算法是利用高斯列主元消去法可求L矩阵,U矩阵,P矩阵,det(A)和解向量X的值。
第一题已回答,算法已实现。
主函数:
第二题(i)式
>>A=[10-701;-32.09999962;5-15-1;2102];b=[85.90000151];
>>[l,u,p]=Gauss_x(A,b)
第二题(ii)
>>A=[3.016.031.99;1.274.16-1.23;0.987-4.819.34];b=[111];
>>[l,u,p]=Gauss_x(A,b)
第二题(iii)
>>A=[3.006.031.99;1.274.16-1.23;0.990-4.819.34];b=[111];
>>[l,u,p]=Gauss_x(A,b)
6.实验数据和实验结果(用屏幕图形表示,可另加附页):
高斯列主元消去法实验结果:
第2题的(i)结果算的如下:
(i)中的p*A=l*u如下:
第2题的(ii)结果算的如下:
(ii)中的p*A=l*u如下:
第2题的(iii)结果算的如下:
(iii)中的p*A=l*u如下:
总结:
高斯列主元消去法中为方便计算行与行会交换,其中PA=LU中P控制行的交换,PA和LU一样求出的是矩阵A行与行交换后的结果。
det(A)可直接调用。
未知数x是利用回代求出的。
7.改进建议:
改进程序算法使源码简短,使程序能实现更多功能。
评分标准学风--报告格式规范,文字清晰观察能力--正确描述和理解需要操作的问题
操作能力--正确输入程序,熟悉编程环境调试能力--熟练使用调试功能解决程序错误