1、数值分析课程设计 数值分析课程设计报告 设计题4、6、8、11、12 姓 名 学 号 院 系 数学与信息科学学院 专 业 信息与计算科学 年 级 2013 级 指导教师 2016年04月25日 目 录设计题四 1龙格现象实验 11.1问题分析与设计思路 1在计算方法中,有利用多项式对某一函数的近似逼近,这样,利用多项式就可以计算相应的函数值。例如,在事先不知道某一函数的具体形式的情况下,只能测量得知某一些分散的函数值。例如我们不知道气温随日期变化的具体函数关系,但是我们可以测量一些孤立的日期的气温值,并假定此气温随日期变化的函数满足某一多项式。这样,利用已经测的数据,应用待定系数法便可以求得一
2、个多项式函数。应用此函数就可以计算或者说预测其他日期的气温值。一般情况下,多项式的次数越多,需要的数据就越多,而预测也就越准确,这就是龙格现象。 11.2程序清单 1(1)编写拉格朗日插值函数,将其存到当前路径的M文件中: 1function y=lagrange(x0,y0,x) 1n=length(x0);m=length(x); 1for i=1:m 1z=x(i); 1L=0.0; 1for j=1:n 1T=1.0; 1for k=1:n 1if k=j 1T=T*(z-x0(k)/(x0(j)-x0(k); 1end 1end 1L=T*y0(j)+L; 1end 1y(i)=L;
3、 1end 2(2)分别取不同的n值,作出相对应n值的插值多项式的曲线图。 2n=4时, 2x0=-5:10/4:5; 2y0=1./(1+x0.2); 2x=-5:0.1:5; 2y=lagrange(x0,y0,x); 2y1=1./(1+x.2); 2plot(x,y,-k) 2hold on 2plot(x,y,-.r) 2n=6时, 2x0=-5:10/6:5; 2y0=1./(1+x0.2); 2x=-5:0.1:5; 2y=lagrange(x0,y0,x); 2 y1=1./(1+x.2); 2 plot(x,y1,-k) 2 hold on 2 plot(x,y,-h) 2n
4、=8时, 2x0=-5:10/8:5; 2y0=1./(1+x0.2); 2x=-5:0.1:5; 2y=lagrange(x0,y0,x); 2y1=1./(1+x.2); 2plot(x,y1,-k) 2hold on 2plot(x,y,-g) 2n=10时, 2x0=-5:1:5; 2y0=1./(1+x0.2); 2x=-5:0.1:5; 2y=lagrange(x0,y0,x); 3y1=1./(1+x.2); 3plot(x,y1,-k) 3hold on 3plot(x,y,-m) 31.3 结果分析 31.4设计总结 3数值分析课程设计总结 22设计题四 龙格现象实验1.1问
5、题分析与设计思路在计算方法中,有利用多项式对某一函数的近似逼近,这样,利用多项式就可以计算相应的函数值。例如,在事先不知道某一函数的具体形式的情况下,只能测量得知某一些分散的函数值。例如我们不知道气温随日期变化的具体函数关系,但是我们可以测量一些孤立的日期的气温值,并假定此气温随日期变化的函数满足某一多项式。这样,利用已经测的数据,应用待定系数法便可以求得一个多项式函数。应用此函数就可以计算或者说预测其他日期的气温值。一般情况下,多项式的次数越多,需要的数据就越多,而预测也就越准确,这就是龙格现象。 对于函数进行拉格朗日插值, 取不同的节点数n,在区间-5,5上取等距间隔的节点为插值点,把和插
6、值多项式的曲线画在同一张图上进行比较。1.2程序清单(1)编写拉格朗日插值函数,将其存到当前路径的M文件中:function y=lagrange(x0,y0,x) n=length(x0);m=length(x);for i=1:m z=x(i); L=0.0; for j=1:n T=1.0; for k=1:n if k=j T=T*(z-x0(k)/(x0(j)-x0(k); end end L=T*y0(j)+L; end y(i)=L;end(2)分别取不同的n值,作出相对应n值的插值多项式的曲线图。n=4时,x0=-5:10/4:5;y0=1./(1+x0.2);x=-5:0.1
7、:5;y=lagrange(x0,y0,x);y1=1./(1+x.2);plot(x,y,-k)hold onplot(x,y,-.r)n=6时,x0=-5:10/6:5;y0=1./(1+x0.2);x=-5:0.1:5;y=lagrange(x0,y0,x); y1=1./(1+x.2); plot(x,y1,-k) hold on plot(x,y,-h)n=8时,x0=-5:10/8:5;y0=1./(1+x0.2);x=-5:0.1:5;y=lagrange(x0,y0,x);y1=1./(1+x.2);plot(x,y1,-k)hold onplot(x,y,-g)n=10时,x
8、0=-5:1:5;y0=1./(1+x0.2);x=-5:0.1:5;y=lagrange(x0,y0,x);y1=1./(1+x.2);plot(x,y1,-k)hold onplot(x,y,-m)1.3 结果分析1.4设计总结 上述现象及结果告诉我们,在进行数值计算时,并不是插值多项式的次数越高(即插值节点越多),插值效果越好,精度也不一定随次数的提高而升高,这种现象称为Runge现象。从数值计算上可解释为高次插值多项式的计算会带来舍入误差的增大,从而引起计算失真。因此,实际应用做插值时一般只用一次、二次最多用三次插值多项式。设计题六函数逼近Matlab实现及其应用2.1问题思路与设计思
9、路 在数值计算中经常要计算函数值,如计算机中计算基本初等函数及其他特殊函数;当函数只在有限点集上给定函数值,要在包含该点集的区间上用公式给出函数的简单表达式,这些都涉及在区间a,b上用简单函数逼近已知复杂函数的问题,这就是函数逼近问题。常用的有最佳平方逼近、最小二乘法。2.2程序清单(1)最佳平方逼近: legendre(N)函数:function p=legendre(N)syms t x;%定义符号变量t xfor n=1:N pp(n)=diff(t2-1)(n-1),n-1);%diff函数,求函数的n阶导数 Q(n)=2(n-1)*prod(1:n-1);%prod函数,计算数组元素
10、的连乘积endpp(1)=1;Q=sym(Q);p=pp*(inv(diag(Q);用M文件建立被逼近函数:function F=creat(x)n=length(x);F=x.*cos(x(1:n);区间变换函数程序:function f=convert(a,b,F)syms x t;s=2(b-a)*t+a+b);f=subs(F,x,s);变步长复化梯形求积公式:function I=tx(g)m=1;h=1-(-1);T=zeros(1,100);T(1)=h*(feval(g,-1)+feval(g,1)/2;i=1;while i100 m=2*m; h=h/2; s=0; for
11、 k=1:m/2 x=-1+h*(2*k-1); s=s+feval(g,x); end T(i+1)=T(i)/2+h*s; if abs(T(i+1)-T(i)6 if abs(t(k,4)-t(k-1,4)=15 disp(溢出); end3.3 结果分析复合辛普森公式在命令窗口输入:fun=inline(1./(1+x.2); xinpusen(fun,01,10)运行结果如下:高斯求解高斯在命令窗口输入:gaosi(inline(1./(1+x.2),0,1,2,3)运行结果如下:龙贝格求积公式运行结果如下:3.4 设计总结实验结果显示每一个算法都接近真实值,但龙贝格算法相比较复合辛
12、普森算法,高斯算法来说更加接近.对于代数精度来说,复合辛普森的代数精度为11,龙贝格代数精度为11,高斯代数精度为11。可见代数精度相同时,龙贝格的求积精度最小,所以相同条件下龙贝格求积公式最能接近准确值。这次课程设计,用MATLAB实验对数值积分进行了实现,用了3种不同的数值积分的方法,实现过程中发现了各种方法之间的区别和联系.并且在实验过程中,使自己对数值积分和MATLAB更加的熟悉.做到了学习和实践相联系。设计题十一 非线性方程的数值解法的Matlab实现及其应用 4.1 问题思路与设计思路非线性是实际问题中经常出现的,并且在科学与工程计算中的地位越来越重要,很多我们熟悉的线性模型都是在
13、一定条件下由非线性问题简化得到的。非线性问题一般不存在直接的求解公式,故没有直接方法求解,都要使用迭代法求解,迭代法要求先给出根的一个近似,若且,根据连续函数性质可知在内至少有一个实根,这时称为方程的有根区间,通常可通过逐次搜索法求得方程的有根区间。对于方程,如果是线性函数,则它的求根是容易的。牛顿法实质上是一种线性化方法,其基本思想是将非线性方程逐步归结为某种线性方程来求解。设已知方程有近似根,将函数在点展开,有,于是方程可近似地表示为:,这是个线性方程记其根为,则的计算公式为:,这就是牛顿法。二分法的基本思想是将方程根的区间平分为两个小区间,把有根的小区间再平分为两个更小的区间,进一步考察
14、根在哪个更小的区间内。如此继续下去,直到求出满足精度要求的近似值。4.2 程序清单迭代法:求方程的一个近似解,给定初值为,误差不超过。functionp,k,err,P=fixpt(f1021,p0,tol,max1)P(1) = p0; for k = 2:max1 P(k) = feval(f1021, P(k-1); k, err = abs(P(k) - P(k-1) p = P(k); if(errtol), break; end if k = max1 disp(maximum number of iterations exceeded); endendP=P;定义一个名为f102
15、1.m的函数文件function y = f1021(x) y = sin(x)/x;割线法:求方程的一个近似解,给定初值-1.5,-1.52,误差不超过。function p1, err, k, y = secant(f1042, p0, p1, delta, max1) p0, p1, feval(f1042, p0), feval(f1042,p1), k = 0; for k = 1:max1 p2 = p1 - feval(f1042,p1)*(p1-p0)/(feval(f1042,p1) - feval(f1042,p0); err = abs(p2-p1); p0 = p1;
16、p1 = p2; p1, err, k, y = feval(f1042, p1); if (err delta) | (y = 0), break, endend先定义一个名为f1042.m的函数文件function y = f1042(x) y = x3-x + 2;建立一个主程序prog1042.mclcclearsecant(f1042,-1.5,-1.52,10(-6),11)牛顿法:求解方程的一个近似解,给定初值为1.2,误差不超过。function p1,err,k,y=newton(f1041,df1041,p0,delta,max1) p0, feval(f1041,p0)
17、for k=1:max1 p1=p0-feval(f1041,p0)/feval(df1041,p0); err=abs(p1-p0); p0=p1; p1,err,k,y=feval(f1041, p1) if (err 0 disp(该方程在【a,b】上无解);elseif f1=0 root=a;elseif f2=0 root=b;else a0=a; b0=b; A=; while abs(b0-a0)/2)=esp half=(a0+b0)/2; fa=subs(f,a0); fb=subs(f,b0); fhalf=subs(f,half); if fhalf=0 root=ha
18、lf; break; elseif fa*fhalf0 b0=half; else a0=half; end A=A,half; end root=(b0+a0)/2;endrootA4.3 结果分析迭代法:在命令窗口输入:clcclear allfixpt(f1021,0.5,10(-5),20)运行结果如下:k = 2err =0.4589k = 3err = 0.1052k = 4err = 0.0292k =5err = 0.0078k = 6err = 0.0021k = 7err = 5.7408e-004k = 8err = 1.5525e-004k = 9err = 4.1975e-005k = 10err =1.1350e-005k =11err =3.0688e-006ans =0.8767割线法:在命令窗口输入:clcclear secant(f1042,-1.
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1