#数值分析首次试做实验记录.docx
- 文档编号:16289676
- 上传时间:2023-07-12
- 格式:DOCX
- 页数:28
- 大小:96.34KB
#数值分析首次试做实验记录.docx
《#数值分析首次试做实验记录.docx》由会员分享,可在线阅读,更多相关《#数值分析首次试做实验记录.docx(28页珍藏版)》请在冰点文库上搜索。
#数值分析首次试做实验记录
首次试做实验记录
实验中心(室):
年月日
实验课程名称
数值分析
面向专业
信息和计算科学
总学时数
实验项目名称
线性方程组的直接解法
实验学时
一、实验目的、要求
目的:
掌握解线性方程组直接法(特别是顺序高斯消去法)的基本思想,熟悉其算法,加强编程能力和编程技巧,练习从数值分析的角度看问题。
要求:
针对给定的实验题目,根据所学的算法,能够熟练地使用某种语言上机编程,给出实验结果,注意上机编程的正确性。
二、实验原理
用高斯消去法解线性方程组的基本思想是设法消去方程组的系数矩阵A的主对角线下的元素,而将线性方程组化为等价的上三角形方程组,然后再通过回代过程便可获得原方程组的解。
三、使用仪器、材料
计算机一台,Matlab、C、Mathematica等软件。
四、实验内容:
用高斯消去法求解下列方程组Ax=b,其中
A=【222
324
139】
b=【1.0000
0.5000
2.5000】
五、实验过程原始记录(数据、图表、计算等)
Matlab源代码:
functionx=Gauss_solve(A,b)
[n,n]=size(A);
fork=1:
n-1
ifA(k,k)==0
disp('Aissingular,stop.')
end
fori=k+1:
n
mik=A(i,k)/A(k,k);
b(i)=b(i)-mik*b(k);
forj=k+1:
n
A(i,j)=A(i,j)-mik*A(k,j);
end
end
end
%backsubstitution
x=zeros(n,1);
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
六、实验结果及分析
在命令窗口输入相关数据,运行上面定义的函数Gauss_solve
>>A=[222;324;139]
A=
222
324
139
>>b=[1;1/2;5/2]
b=
1.0000
0.5000
2.5000
>>x=Gauss_solve(A,b)
x=
-0.5000
1.0000
0
结果分析:
根据顺序高斯消去法的算法,使用Matlab编写了程序,对所给的题目进行了求解。
利用高等代数中的基本内容,我们可以看出该程序能够成功求解所给的线性方程组。
实验中心(室)验收审查意见
实验中心(室)主任签字:
首次试做实验记录
实验中心(室):
年月日
实验课程名称
数值分析
面向专业
信息和计算科学
总学时数
实验项目名称
线性方程组的迭代解法
实验学时
一、实验目的、要求
目的:
掌握解线性方程组几种常见的迭代解法的基本思想,熟悉其算法,练习引入迭代矩阵的形式来解决方程组。
要求:
针对给定的实验题目,根据所学的算法,能够熟练地使用某种语言上机编程,给出实验结果,注意上机编程的正确性。
二、实验原理
用迭代法求解方程组的基本思想:
首先对A进行分解,A=D-L-U,找出下三角阵L,再找出上对角阵U,还有主对角阵D,于是有
Jacobi迭代法的矩阵形式的迭代公式为x=inv(D)*(L+U)*x+inv(D)*b
Gauss-Seidel迭代法的矩阵形式的迭代公式x=inv(D-L)*U*x+inv(D-L)*b
利用迭代即可在循环中实现的原则来完成此方程组的求解。
注意在编程时也可使用分量形式的迭代公式。
三、使用仪器、材料
计算机一台,Matlab、C、Mathematica等软件。
四、实验内容:
用Jacobi迭代法和G-S迭代法求方程组:
AX=b,其中
A=【10-120
-111-13
2-110-1
03-18】
b=【6
25
-11
15】
五、实验过程原始记录(数据、图表、计算等)
Jacobi迭代法的Matlab源代码:
function[iter,x]=Jacobi(A,b,x0,eps,M)
n=length(x0);
x=x0;
iter=0;
fork=1:
M
fori=1:
n
sum=0;
forj=1:
n
ifj~=i
sum=sum+A(i,j)*x0(j);%x0standsforx_k
end
end
x(i)=(b(i)-sum)/A(i,i);%xstandsforx_{k+1}
end
ifnorm(x-x0) iter=k; return end x0=x; end disp('超过最大迭代次数') Gauss-Seidel迭代法的Matlab源代码: function[iter,x]=GS(A,b,x0,eps,M) n=length(x0); iter=0; fork=1: M x=x0;%xstandsforx_{k},x0standsforx_{k+1} fori=1: n ifi==1 sum=0; forj=2: n sum=sum+A(i,j)*x0(j); end t=(b(i)-sum)/A(i,i); x0(i)=t; end%endi==1 if1 sum=0; forj=1: i-1 sum=sum+A(i,j)*x0(j); end forj=i+1: n sum=sum+A(i,j)*x0(j); end t=(b(i)-sum)/A(i,i); x0(i)=t; end%end1 ifi==n sum=0; forj=1: n-1 sum=sum+A(i,j)*x0(j); end t=(b(i)-sum)/A(i,i); x0(i)=t; end%endi==n end%endi ifnorm(x-x0) x=x0; iter=k; return end end%endk disp('超过最大迭代次数') 六、实验结果及分析 在命令窗口输入相关数据,运行上面定义的函数Jacobi >>A=[10-120;-111-13;2-110-1;03-18] A= 10-120 -111-13 2-110-1 03-18 >>b=[6;25;-11;15] b= 6 25 -11 15 >>x0=[0;0;0;0] x0= 0 0 0 0 >>M=100 M= 100 >>eps=1e-4 eps= 1.0000e-004 >>[iter,x]=Jacobi(A,b,x0,eps,M) iter= 13 x= 1.0000 2.0000 -1.0000 1.0000 然后运行上面定义的函数GS >>[iter,x]=GS(A,b,x0,eps,M) iter= 6 x= 1.0000 2.0000 -1.0000 1.0000 结果分析: 根据Jacobi迭代法和Gauss-Seidel迭代法的算法,使用Matlab分别编写了程序,并对所给的题目进行了求解。 利用高等代数中的基本内容,我们可以看出这两个程序都能够成功求解所给的线性方程组。 从理论学习中我们知道,本题中的系数矩阵A为按行严格对角占优矩阵,所以理论上来说,Jacobi迭代法和Gauss-Seidel迭代法都应收敛,而且Gauss-Seidel迭代法的收敛速度应该更快。 从实验我们可以得到同样的结论,所以理论分析和试验的结果是相吻合的。 实验中心(室)验收审查意见 实验中心(室)主任签字: 首次试做实验记录 实验中心(室): 年月日 实验课程名称 数值分析 面向专业 信息和计算科学 总学时数 实验项目名称 解非线性方程的迭代法 实验学时 一、实验目的、要求 目的: 掌握解非线性方程的几种常见的迭代解法的基本思想,熟悉其算法,加深理解迭代法的真谛,掌握其中的规律。 要求: 针对给定的实验题目,根据所学的算法,能够熟练地使用某种语言上机编程,给出实验结果,注意上机编程的正确性。 二、实验原理 二分法的基本原理为将给定的初始有根区间逐步分半,直到找到满足一定精度要求的解,其基本思想为: 对当前的有根区间,取其中点作为真解的近似值,若满足精度要求则停止计算,否则,从得到的两个小区间中选择一个作为新的有根区间,重复上述过程。 程序中重要的是循环语句的使用和有根区间端点的判断。 牛顿法是一种非常重要的不动点迭代方法,对于不动点迭代而言,最重要的是迭代函数的构造。 Newton法的迭代函数的构造依据是“由当前点的切线来代替原曲线,将该切线和x轴的交点作为下一个迭代点”。 编程时注意用循环语句来实现迭代过程。 三、使用仪器、材料 计算机一台,Matlab、C、Mathematica等软件。 四、实验内容: 在区间[1,3]用二分法求 。 用牛顿法解方程 。 五、实验过程原始记录(数据、图表、计算等) 二分法的Matlab源代码: functionf=fun(x) f=2^(-x)+exp(x)+2*cos(x)-6; function[iter,x]=bisection(a,b,eps) funa=fun(a); funb=fun(b); iffuna*funb>=0 disp('Error,pleasegivethecorrectinitialpointsaandb! '); end k=0;%kstandsfortheiteration while1 c=(a+b)/2; func=fun(c); k=k+1; if(abs(c-a)<=eps)|(abs(func)<=eps) x=c; iter=k; return; end iffuna*func<0 b=c; else a=c; end End Newton法的Matlab源代码: functionf=fun(x) f=exp(x)-1.5-atan(x); functionf=fun_derivative(x) f=exp(x)-1/(1+x^2); function[iter,x]=newton_equation(x0,M,eps1,eps2) iter=0; v=fun(x0); ifabs(v) x=x0; return end fork=1: M x1=x0-v/fun_derivative(x0); v=fun(x1); iter=iter+1; if(abs(x1-x0) x=x1; return end x0=x1; end End 六、实验结果及分析 在命令窗口输入相关数据,运行函数bisection,得 >>a=1 a= 1 >>b=3 b= 3 >>eps=1e-4 eps= 1.0000e-004 >>[iter,x]=bisection(a,b,eps) iter= 15 x= 1.8294 >>fun(x) ans= 9.4896e-005 在命令窗口输入相关数据,运行函数newton_equation得 >>x0=-7 x0= -7 >>M=20 M= 20 >>eps1=1e-3 eps1= 1.0000e-003 >>eps2=1e-5 eps2= 1.0000e-005 >>[iter,x]=newton_equation(x0,M,eps1,eps2) iter= 4 x= -14.1011 >>fun(x) ans= -7.9958e-007 结果分析: 根据二分法的算法和牛顿法的算法,使用Matlab分别编写了程序,并对所给的题目进行了求解。 从结果我们可以看出,这两种算法都对所给的非线性方程成功地给予了求解,从而说明了这两种算法的可行性和有效性。 事实上,我们可以进一步实验,针对同一道题目用两种不同的方法求解,从而进一步明确两种方法各自的特点: 二分法简单,有全局收敛性,但收敛速度比较慢;牛顿法解单根问题时可保证局部二阶的收敛性质。 实验中心(室)验收审查意见 实验中心(室)主任签字: 首次试做实验记录 实验中心(室): 年月日 实验课程名称 数值分析 面向专业 信息和计算科学 总学时数 实验项目名称 解非线性方程组的迭代法 实验学时 一、实验目的、要求 目的: 掌握解非线性方程组的迭代法(重点是牛顿法)的基本思想,熟悉其算法,加深理解迭代法的真谛,掌握其中的规律。 要求: 针对给定的实验题目,根据所学的算法,能够熟练地使用某种语言上机编程,给出实验结果,注意上机编程的正确性。 二、实验原理 解非线性方程组的牛顿法的迭代公式为 其中, 表示 的Jacobi矩阵,即 注意用循环语句来实现迭代过程。 三、使用仪器、材料 计算机一台,Matlab、C、Mathematica等软件。 四、实验内容: 用牛顿法求解非线性方程组 五、实验过程原始记录(数据、图表、计算等) 该方程组可等价写成 ,其中 。 Matlab源代码: %程序funf.m给出了非线性方程组所对应的非线性函数 functionf=funf(x) f=[-cos(x (1))/81+x (2)^2/9+sin(x(3))/3-x (1); sin(x (1))/3+cos(x(3))/3-x (2); -cos(x (1))/9+x (2)/3+sin(x(3))/6-x(3)]; %程序发funJ.m给出了非线性函数的雅可比矩阵 functionJ=funJ(x) J=[sin(x (1))/81-1x (2)*2/9cos(x(3))/3; cos(x (1))/3-1-sin(x(3))/3; sin(x (1))/91/3cos(x(3))/6-1]; %程序Newton.m为解非线性方程组的牛顿法的主程序 function[m,r]=Newton(x0,eps) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %x0为初始迭代点 %eps为误差容限 %r最终所得的近似解 %m迭代次数 n=length(x0); Fx=funf(x0); J=funJ(x0); r=x0; m=0; fprintf('\n第%d次迭代所得x的值: \n',m); disp(x0'); fori=1: 1000 d=-inv(J)*Fx; x=x0+d; x0=x; Fx=funf(x0); J=funJ(x0); fprintf('\n第%d次迭代所得x的值: \n',i); disp(x0'); ifnorm(d) r=x; m=i; return end end 六、实验结果及分析 实验结果: 在命令窗口输入相关数据,运行上面定义的函数Newton >>x0=[0;0;0] >>eps=1e-4 >>[m,r]=Newton(x0,eps) 第0次迭代所得的x的值: 000 第1次迭代所得的x的值: -0.01290.3290-0.0017 第2次迭代所得的x的值: -0.00000.3333-0.0000 第3次迭代所得的x的值: 0.00000.33330.0000 m= 3 r= 0.0000 0.3333 0.0000 结果分析: 根据解非线性方程组的牛顿法的算法,使用Matlab分别编写了程序,并对所给的题目进行了求解。 从结果我们可以看出,该算法对所给的非线性方程组成功地给予了求解,从而说明了解非线性方程组的牛顿法的可行性和有效性。 实验中心(室)验收审查意见 实验中心(室)主任签字: 首次试做实验记录 实验中心(室): 年月日 实验课程名称 数值分析 面向专业 信息和计算科学 总学时数 实验项目名称 解非线性方程组的迭代法 实验学时 一、实验目的、要求 目的: 掌握解非线性方程组的迭代法(重点是牛顿法)的基本思想,熟悉其算法,加深理解迭代法的真谛,掌握其中的规律。 要求: 针对给定的实验题目,根据所学的算法,能够熟练地使用某种语言上机编程,给出实验结果,注意上机编程的正确性。 二、实验原理 解非线性方程组的牛顿法的迭代公式为 其中, 表示 的Jacobi矩阵,即 注意用循环语句来实现迭代过程。 三、使用仪器、材料 计算机一台,Matlab、C、Mathematica等软件。 四、实验内容: 用牛顿法求解非线性方程组 五、实验过程原始记录(数据、图表、计算等) 该方程组可等价写成 ,其中 。 Matlab源代码: %程序funf.m给出了非线性方程组所对应的非线性函数 functionf=funf(x) f=[-cos(x (1))/81+x (2)^2/9+sin(x(3))/3-x (1); sin(x (1))/3+cos(x(3))/3-x (2); -cos(x (1))/9+x (2)/3+sin(x(3))/6-x(3)]; %程序发funJ.m给出了非线性函数的雅可比矩阵 functionJ=funJ(x) J=[sin(x (1))/81-1x (2)*2/9cos(x(3))/3; cos(x (1))/3-1-sin(x(3))/3; sin(x (1))/91/3cos(x(3))/6-1]; %程序Newton.m为解非线性方程组的牛顿法的主程序 function[m,r]=Newton(x0,eps) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %x0为初始迭代点 %eps为误差容限 %r最终所得的近似解 %m迭代次数 n=length(x0); Fx=funf(x0); J=funJ(x0); r=x0; m=0; fprintf('\n第%d次迭代所得x的值: \n',m); disp(x0'); fori=1: 1000 d=-inv(J)*Fx; x=x0+d; x0=x; Fx=funf(x0); J=funJ(x0); fprintf('\n第%d次迭代所得x的值: \n',i); disp(x0'); ifnorm(d) r=x; m=i; return end end 六、实验结果及分析 实验结果: 在命令窗口输入相关数据,运行上面定义的函数Newton >>x0=[0;0;0] >>eps=1e-4 >>[m,r]=Newton(x0,eps) 第0次迭代所得的x的值: 000 第1次迭代所得的x的值: -0.01290.3290-0.0017 第2次迭代所得的x的值: -0.00000.3333-0.0000 第3次迭代所得的x的值: 0.00000.33330.0000 m= 3 r= 0.0000 0.3333 0.0000 结果分析: 根据解非线性方程组的牛顿法的算法,使用Matlab分别编写了程序,并对所给的题目进行了求解。 从结果我们可以看出,该算法对所给的非线性方程组成功地给予了求解,从而说明了解非线性方程组的牛顿法的可行性和有效性。 实验中心(室)验收审查意见 实验中心(室)主任签字: 首次试做实验记录 实验中心(室): 年月日 实验课程名称 数值分析 面向专业 信息和计算科学 总学时数 实验项目名称 插值多项式的构造 实验学时 一、实验目的、要求 实验目的: 已知一组数据,学会如何构造该组数据的插值多项式函数,了解利用插值多项式来逼近函数的重要思想,重点掌握Lagrange插值多项式和牛顿插值多项式的构造方法。 要求: 针对给定的实验题目,根据所学的算法,能够熟练地使用某种语言上机编程,给出实验结果,注意上机编程的正确性。 二、实验原理 Lagrange插值多项式的构造原理: 我们首先需要构造插值基函数,(注意基函数存在一定的规律性),在此基础之上构造Lagrange插值多项式函数,进而求近似值。 牛顿插值多项式的构造具有很强的规律性,我们首先根据所给的数据构造差商表,然后在此基础上构造插值多项式。 三、使用仪器、材料 计算机一台,Matlab、C、Mathematica等软件。 四、实验内容: 1、已知函数表 xi1245 yi161289 求出其Lagrange插值多项式,并由此计算x=1.2处的近似值。 2、构造适合下列数据表的牛顿插值公式: x -1 0 1 3 y -1 1 3 5 五、实验过程原始记录(数据、图表、计算等) 针对习题1的Lagrange插值多项式的Mathematica源代码: r0[x_,x0_,a_,b_,c_]: =(x-a)*(x-b)*(x-c)/((x0-a)*(x0-b)*(x0-c)) L3[x_]: =r0[x,1,2,4,5]*16+r0[x,2,1,4,5]*12+r0[x,4,1,2,5]*8+r0[x,5,1,2,4]*9; L3[x]//N Simplify[%]%对结果进行展开 L3[1.2]//N%求x=1.2处的近似值 针对习题2的Newton插值多项式的Matlab源代码: disp('构造适合下列数据表的牛顿插值公式: ') disp('x-1013') disp('y-1135') %三次牛顿插值公式为: %P3=f(x0)+f[x0,x1](x-x0)+f[x0,x1,x2](x-x0)(x-x1)+f[x0,x1,x2,x3](x-x0)%(x-x1)(x-x2) X=[-1013]; Y=[-1135]; CS=[100,100,100;100,100,100;100,100,100];%构造差商表 fori=1: 1: 3 CS(1,i)=(Y(i+1)-Y(i))/(X(i+1)-X(i)); end fori=1: 1: 2 CS(2,i)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数值 分析 首次 试做 实验 记录
![提示](https://static.bingdoc.com/images/bang_tan.gif)