数值分析实验报告完整版Word文件下载.docx
《数值分析实验报告完整版Word文件下载.docx》由会员分享,可在线阅读,更多相关《数值分析实验报告完整版Word文件下载.docx(33页珍藏版)》请在冰豆网上搜索。
成绩
一、试验目:
(1)高斯列主元消去法求解线性方程组过程
(2)熟悉用迭代法求解线性方程组过程
(3)设计出对应算法,编制对应函数子程序
二、试验内容
分别用高斯列主元消元法和直接消元法求解线性方程组:
三、试验原理
对于线性方程组
(1)
常记为矩阵形式
(2)
依据高等代数知识,若,上式解存在且唯一。
(1)Gauss直接消元法
考虑上述线性方程组增广矩阵,对增广矩阵进行行变换,将
(2)式化为等价三角形方阵,然后回代解之,这就是Gauss消元法。
具体以下:
a)消元
令;
对k=1到n-1,若,进行
b)回代,若
(2)Gauss列主元消元法
设列主元消元法已完成第k-1()次消元,到方程组
在进行第k次消元前,优异行2个步骤:
a)在至这一列内选出最大值,即,若,此时
方程组无确定解,应给出退出信息。
b)若,则交换第行和行,然后用Gauss消元法进行消元。
四、MATLAB软件实现
(1)写出Gauss消元法和列主元消元法实现MATLAB函数
依据以上算法,写出以下程序:
%%%%%%%Gauss消元法%%%%%%%%%%%%
functiony=Gauss1(A,b)
[m,n]=size(A);
%检验系数正确性
ifm~=n
error('
矩阵A行数和列数必需相同'
);
return;
end
ifm~=size(b)
b大小必需和A行数或A列数相同'
%再检验方程是否存在唯一解
ifrank(A)~=rank([A,b])
A矩阵秩和增广矩阵秩不相同,方程不存在唯一解'
%这里采取增广矩阵行变换方法求解
c=n+1;
A(:
c)=b;
%%消元过程
fork=1:
n-1
A(k+1:
n,k:
c)=A(k+1:
c)-(A(k+1:
n,k)/A(k,k))*A(k,k:
c);
%%回代结果
x=zeros(length(b),1);
x(n)=A(n,c)/A(n,n);
fork=n-1:
-1:
1
x(k)=(A(k,c)-A(k,k+1:
n)*x(k+1:
n))/A(k,k);
%显示计算结果
%disp('
x='
%disp(x);
y=x;
%%%%%%%%%%%%高斯列主元消元法求解线性方程组Ax=b%%%%%%%%%%%%%%
%A为输入矩阵系数,b为方程组右端系数
%方程组解保留在x变量中
functiony=Gauss_line(A,b)
formatlong;
%设置为长格式显示,显示15位小数
%先检验系数正确性
%(增广)
[r,m]=max(abs(A(k:
n,k)));
%选主元
m=m+k-1;
%修正操作行值
if(A(m,k)~=0)
if(m~=k)
A([km],:
)=A([mk],:
%换行
end
A(k+1:
%消去
%回代求解
x(k)=(A(k,c)-A(k,k+1:
formatshort;
%设置为默认格式显示,显示5位
(2)建立MATLAB界面
利用MATLABGUI建立以下界面求解线性方程组:
详见程序。
五、计算实例、数据、结果、分析
下面我们对以上结果进行测试,求解:
输入数据后点击和,得到以下结果:
更改以上数据进行测试,求解以下方程组:
得到以下结果:
六、试验中碰到问题及处理措施
在本试验中,碰到问题关键有两个:
(1)怎样将上述Gauss消元法算法在MATLAB中实现
针对此问题我借鉴了网上以及书本上算法MATLAB实现程序;
(2)怎样将建立界面使得能够随意输入想要求解相关矩阵后就能够直接求解
针对此问题,我经过网上部分相关MATLABGUI设计相关资料,总结经验完成了此项任务。
七、试验结论
经过以上测试,我们发觉以上算法和程序能够求出线性方程组比较正确解。
八、参考文件
[1]杨大地,王开荣..数值分析.北京:
科学出版社
[2]何光辉..数值分析试验.重庆大学数理学院数学试验教学中心
[3]baidu文库,baidu知道
年月日
插值方法
何光辉
√
(1)学会拉格朗日插值、牛顿插值等基础方法
(2)设计出对应算法,编制对应函数子程序
(3)会用这些函数处理实际问题
(1)设计拉格朗日插值算法,编制并调试对应函数子程序
(2)设计牛顿插值算法,编制并调试对应函数子程序
(3)给定函数四个点数据以下:
X
1.1
2.3
3.9
5.1
Y
3.887
4.276
4.651
2.117
试用拉格朗日插值确定函数在x=2.101,4.234处函数值。
(4)已知用牛顿插值公式求近似值。
(1)拉格朗日插值
n次拉格朗日插值多项式为:
Ln(x)=y0l0(x)+y1l1(x)+y2l2(x)+…+ynln(x)
n=1时,称为线性插值,L1(x)=y0(x-x1)/(x0-x1)+y1(x-x0)/(x1-x0)=y0+(y1-x0)(x-x0)/(x1-x0)
n=2时,称为二次插值或抛物线插值,精度相对高些
L2(x)=y0(x-x1)(x-x2)/(x0-x1)/(x0-x2)+y1(x-x0)(x-x2)/(x1-x0)/(x1-x2)+y2(x-x0)(x-x1)/(x2-x0)/(x2-x1)
对节点xi(i=0,1,…,n)中任一点xk(0<
=k<
=n)作一n次多项式lk(xk),使它在该点上取值为1,而在其它点xi(i=0,1,…,k-1,k+1,…,n)上为0,则插值多项式为Ln(x)=y0l0(x)+y1l1(x)+y2l2(x)+…+ynln(x)
上式表明:
n个点xi(i=0,1,…,k-1,k+1,…,n)都是lk(x)零点。
(2)牛顿插值
插商公式
Newton插值多项式为
(1)分别写出lagrange插值法和Newton插值法求解函数
%%%%%%%%%%%%%%lagrange插值法求解函数%%%%%%%%%%%%%%%%
%x,y为初始数据,z为插值点
functionz=lagrange(x,y,a)
%显示15位
n=length(x);
%取长度
%初始计算
s=0;
%进入公式计算
forj=0:
(n-1)
t=1;
fori=0:
ifi~=j
t=t*(a-x(i+1))/(x(j+1)-x(i+1));
s=s+t*y(j+1);
z=s;
%显示输出结果
%%%%%%%%%%%%%%%Newton插值法求解函数%%%%%%%%%%%%%%
functionj=Newton(x,y,z)
n=max(size(x));
l=1;
a=y
(1);
B=a;
s=1;
%一次因子乘积,预设为1
dx=y;
%差商
fori=1:
dx0=dx;
forj=1:
n-i
dx(j)=(dx0(j+1)-dx0(j))/(x(i+j)-x(j));
df=dx
(1);
s=s*(z-x(i));
%一次因子乘积
a=a+s*df;
%计算各次Newton插值值
l=l+1;
B=a;
%结果保留在变量B中
j=B;
(2)建立界面
利用MATLAB中GUI编程建立以下界面:
下面我们对以上问题进行测试:
输入数据:
计算结果以下:
当x=2.101时,
x=4.234时,
同理能够测试(4)中值。
(3)怎样将上述插值算法在MATLAB中实现
(4)怎样将建立界面使得能够随意输入想要求解相关矩阵后就能够直接求解
经过以上测试,我们发觉以上算法和程序能够求出插值比较正确解。
[2]何光辉..数值分析试验.数理学院数学试验教学中心
数值微积分
(1)学会复化梯形、复化辛浦生求积公式应用
(1)设计复化梯形公式求积算法,编制并调试对应函数子程序
(2)设计复化辛浦生求积算法,编制并调试对应函数子程序
(4)分别用复化梯形公式和复化辛浦生公式计算定积分
(1)复化梯形求积公式
图1复化梯形求积公式算法步骤图
Step1给出被积函数、区间端点和等分数;
Step2求出;
Step3计算;
Step4得
(2)复化辛普森求积公式
图2复化辛普森求积公式算法步骤图
Step1给出被积函数、区间端点和等分数;