数值分析实验报告文档格式.docx
《数值分析实验报告文档格式.docx》由会员分享,可在线阅读,更多相关《数值分析实验报告文档格式.docx(32页珍藏版)》请在冰豆网上搜索。
成绩
一、实验目的:
(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界面
利用MATLAB的GUI建立如下界面求解线性方程组:
详见程序。
五、计算实例、数据、结果、分析
下面我们对以上的结果进行测试,求解:
输入数据后点击和,得到如下结果:
更改以上数据进行测试,求解如下方程组:
得到如下结果:
六、实验中遇到的问题及解决办法
在本实验中,遇到的问题主要有两个:
(1)如何将上述的Gauss消元法的算法在MATLAB中实现
针对此问题我借鉴了网上以及课本上的算法的MATLAB实现的程序;
(2)如何将建立界面使得可以随意输入想要求解的相关矩阵后就可以直接求解
针对此问题,我通过网上的一些关于MATLAB的GUI设计的相关资料,总结经验完成了此项任务。
七、实验结论
通过以上的测试,我们发现以上算法和程序能够求出线性方程组的比较精确解。
八、参考文献
[1]杨大地,王开荣.2006.数值分析.北京:
科学出版社
[2]何光辉.2008.数值分析实验.重庆大学数理学院数学实验教学中心
[3]XX文库,XX知道
年月日
插值方法
何光辉
√
(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]何光辉.2008.数值分析实验.数理学院数学实验教学中心
数值微积分
(1)学会复化梯形、复化辛浦生求积公式的应用
(2)设计出相应的算法,编制相应的函数子程序
(3)会用这些函数解决实际问题
(1)设计复化梯形公式求积算法,编制并调试相应的函数子程序
(2)设计复化辛浦生求积算法,编制并调试相应的函数子程序
(4)分别用复化梯形公式和复化辛浦生公式计算定积分
(1)复化梯形求积公式
开始
图1复化梯形求积公式算法的流程图
Step1给出被积函数、区间端点和等分数;
Step2求出;
Step3计算;
Step4得
(2)复化辛普森求积公式
图2复化辛普森求积