数值分析实验四(龙格函数)

合集下载

数值分析(计算方法)课程设计实验报告(附程序)

数值分析(计算方法)课程设计实验报告(附程序)

n=4 时,max[L(X)-h(X)]=0.4020;
n=8 时,max[L(X)-h(X)]=0.1708;
n=10 时,max[L(X)-h(X)]=0.1092。
图象分析: 从图象可以看出随着插值节点数的增加出现异常的摆动,中间能较好的接近 原函数,但两边却出现很大的误差。
(3).对定义在(-5,5)上的函数
程序代码 2:
x=[-1:0.2:1]; y=1./(1+25.*x.^2); x0=[-1:0.01:1]; y0=lagrange(x,y,x0); y1=1./(1+25.*x0.^2);
plot(x0,y0,'--r'); hold on; plot(x0,y1,'-b'); x2=abs(y0-y1); max(x2) ; 程序代码3: n=3; for i=1:n x(i)=cos(((2.*i-1).*pi)./(2.*(n+1))); y(i)=1./(1+25.*x(i).*x(i)); end x0=-1:0.01:1; y0=lagrange(x,y,x0); y1=1./(1+25.*x0.^2); plot(x0,y0,'--r') hold on plot(x0,y1,'-b')
以 x1,x2,„,xn+1 为插值节点构造上述各函数的 Lagrange 插值多项式, 比较其 结果。
设计过程: 已知函数 f(x)在 n+1 个点 x0,x1,…,xn 处的函数值为 y0,y1,…,yn 。 求一 n 次多 项式函数 Pn(x),使其满足: Pn(xi)=yi,i=0,1,…,n. 解决此问题的拉格朗日插值多项式公式如下

四阶龙格-库塔法求解常微分方程的初值问题-matlab通用程序

四阶龙格-库塔法求解常微分方程的初值问题-matlab通用程序

参考教材《数值分析》李乃成.梅立泉clearclcformat longm=input('请输入常微分方程的阶数m=');a=input('请输入x下限a=');b=input('请输入x上限b=');h=input('请输入步长h=');ym=input('令y(1,1)=y,y(2,1)=y’,y(3,1)=y’’...请输入ym=','s'); %输入的时候必须按照这个形式输入y1=y(1,1);if m==1 %一阶初值问题单独求解mm=(b-a)/h;y(1,1)=input('请输入在初值点的函数值f(a)=');x=a;y11(1)=y(1,1);for k1=2:(mm+1)y1=y(1,1);K(1,1)=h*(eval(ym)); %计算K1x=x+h/2;y(1,1)=y1+K(1,1)/2;y1=y(1,1);K(1,2)=h*(eval(ym)); %计算K2x=x;y(1,1)=y1+K(1,2)/2-K(1,1)/2;y1=y(1,1);K(1,3)=h*(eval(ym)); %计算K3x=x+h/2;y(1,1)=y1+K(1,3)-K(1,2)/2;y1=y(1,1);K(1,4)=h*(eval(ym)); %计算K4y11(k1)=y11(k1-1)+(K(1,1)+2*K(1,2)+2*K(1,3)+K(1,4))/6; y(1,1)=y11(k1);x=a+(k1-1)*h;endy11else %高阶初值问题mm=(b-a)/h; %一共要求解mm个数据点for k2=1:m %读取初值条件fprintf('请输入%d阶导数的初值f(%d)(a)=\n',(k2-1),(k2-1));y(k2,1)=input('=');endfor k2=1:my22(1,k2)=y(k2,1); %先把初值保存在矩阵y22(m,n)中,m表示第几个所求点,n表示第n阶初值endx=a;for k4=2:(mm+1) %求解mm个数据点的循环for k=1:(m-1) %计算K1,包括每一阶的K1 K(k,1)=h*y(k+1,1); %y(k+1,1)中k+1表示第k+1阶,1表示第一个点;K(k,1)中k表示阶数,1表示K1endK(m,1)=h*(eval(ym));x=x+h/2; %求解K1之前,先重新对x和y赋值for k3=1:my(k3,1)=y(k3,1)+K(k3,1)/2;endfor k=1:(m-1) %计算K2K(k,2)=h*y(k+1,1);endK(m,2)=h*(eval(ym));x=x;for k3=1:my(k3,1)=y(k3,1)-K(k3,1)/2+K(k3,2)/2;endfor k=1:(m-1) %计算K3K(k,3)=h*y(k+1,1);endK(m,3)=h*(eval(ym));x=x+h/2;for k3=1:my(k3,1)=y(k3,1)+K(k3,3)-K(k3,2)/2; %这里容易出错endfor k=1:(m-1) %计算K4K(k,4)=h*y(k+1,1);endK(m,4)=h*(eval(ym));for k5=1:my22(k4,k5)=y22(k4-1,k5)+(K(k5,1)+2*K(k5,2)+2*K(k5,3)+K(k5,4))/6; %这里,除了要求出下一个点的数值,还要求出相应的导数值endfor k6=1:m %除了对y(1,1)重新赋值外,还要对y(2,1)等重新赋值y(k6,1)=y22(k4,k6);endx=a+(k4-1)*h;endy22(:,1) end。

数值分析实验四(龙格函数)

数值分析实验四(龙格函数)

实验名称:龙格反例的数值实验实验目的与要求:1、了解切比雪夫多项式零点插值;2、运用切比雪夫多项式零点插值法避免龙格现象。

3、与等距节点构造插值多项式比较。

实验内容:龙格反例的数值实验在区间[–5,5 ]上分别取11阶切比雪夫多项式的零点22)12(cos 5π+=k x k ( k = 0,1,2,……,10) 和等距节点作插值结点,计算函数211)(xx f +=在结点处的值 y k = f (x k )。

构造插值多项式L 10(x ),∑==10010)()(k k k y x l x L 其中,∏≠=--=n k j j j k j k x x x x x l 0)()()(。

取自变量点 t k = – 5 + 0.05k ( k =0,1,…,201),分别计算切比雪夫零点、等距节点插值多项式L k (x )和被插值函数f (x )在离散点t k ( k =0,1,…,201)上的值,并绘出三条曲线比较。

实验环境与器材:9#505机房、《数值分析》实验过程(步骤)或程序代码:function y=Lagrange(x,n,xx,yy)sum=0; %初始化for k=1:n+1lk=1; %初始化for i=1:n+1if k~=ilk=lk*(x-xx(i))/(xx(k)-xx(i));endendsum=lk*yy(k)+sum;endy=sum;clcclearfor i=1:11 %下标只能从1开始x1(i)=-5+10*(i-1)/10;x2(i)=5*cos((2*i-1)*pi/22);y1(i)=1/(1+x1(i)*x1(i));y2(i)=1/(1+x2(i)*x2(i)); %y1,y2分别是在两种节点处得到的函数值endh=0.05;for k=1:202x3(k)=-5+(k-1)*h;y11(k)=Lagrange(x3(k),10,x1,y1);y22(k)=Lagrange(x3(k),10,x2,y2);y(k)=1/(1+x3(k)*x3(k));%y11,y22分别为利用切比雪夫零点和等距节点构造出的插值多项式在离散点处的值endplot(x3,y11,'r');hold onplot(x3,y22,'g');hold onplot(x3,y,'b')%被插值函数在离散点处值的曲线图hold onxlabel('-5<=x<=5');ylabel('y');legend('f(x)=1/(1+x^2)','等距节点插值多项式','切比雪夫多项式零点插值多项式'); xlim([-5,5])实验结果与分析:分析:由高次插值的病态性质,我们知道次数n太高时会出现龙格现象,即L n(x)并不收敛于f(x),由上图我们也可以看到运用等距节点构造的插值多项式的确出现了龙格现象,因此并不适用。

四阶龙格库塔法(Runge-Kutta)求解微分方程

四阶龙格库塔法(Runge-Kutta)求解微分方程

四阶龙格库塔法(Runge-Kutta )求解微分方程张晓颖(天津大学 材料学院 学号:1012208027)1 引言计算传热学中通常需要求解常微分方程。

这类问题的简单形式如下:{),(')(00y x f y y x y == (1)虽然求解常微分方程有各种各样的解析方法,但解析方法只能用来求解一些特殊类型的方程,实际问题中的多数微分方程需要采用数值解法求解。

初值问题(1)的数值解法有个基本特点,它们采取“步进式”,即求解过程顺着节点排序一步一步向前推进。

这类算法是要给出用已知信息y n 、 y n −i ……计算y n +1的递推公式即可。

2 龙格库塔法(Runge-Kutta )介绍假设对于初值问题(1)有解 y = y (x ) ,用 Taylor 展开有:......)(!3)(!2)()()(321+'''+''+'+=+n n n n n x y h x y h x y h x y x y (2) 龙格库塔法(Runge-Kutta )实质上是间接的使用 Taylor 级数法的一种方法。

对于差商hx y x y n n )()(1-+,根据微分中值定理,存在 0 < θ < 1 ,使得:)()()(1h x y hx y x y n n θ+'=-+ (3)于是对于 y = y (x ) ,可得到:))(,()()(1h x y h x hf x y x y n n n n θθ+++=+ (4)设))(,(*h x y h x f K n n θθ++=,为区间 [x n , x n +1 ] 上的平均斜率。

四阶龙格库塔格式中的*K 由下式计算得到:⎪⎪⎪⎪⎪⎩⎪⎪⎪⎪⎪⎨⎧++=++=++==++++=+),()2,2()2,2(),()22(6342312143211hK y h x f K K h y h x f K K h y h x f K y x f K K K K K h y y n n n n nn n n n n (5) 四阶龙格库塔法(Runge-Kutta )的每一步需要四次计算函数值f ,其截断误差更低,计算的精度更高。

数值分析Runge现象计算实验

数值分析Runge现象计算实验

数值分析实验报告(02)一、实验目的通过上机绘制Runge 函数图像,理解高次插值的病态性质。

二、实验内容在区间[-1,1]上分别取n=10,n=20用两组等距节点对龙格(Runge)函数21()125f x x =+作多项式插值,对每个n 值分别画出()f x 和插值函数的图形。

三、编程思路(相关背景知识、算法步骤、流程图、伪代码)四、程序代码(Matlab 或C 语言的程序代码)function yt=Untitled8(x,y,xt)%UNTITLED5 ´Ë´¦ÏÔʾÓйش˺¯ÊýµÄÕªÒª% ´Ë´¦ÏÔʾÏêϸ˵Ã÷n=length(x);ny=length(y);if n~=nyerror('²åÖµ½ÚµãxÓ뺯ÊýÖµy²»Ò»ÖÂ');endm=length(xt);yt=zeros(1,m);for k=1:nlk=ones(1,m);for j=1:nif j~=klk=lk.*(xt-x(j))/(x(k)-x(j));endend ;yt=yt+y(k)*lk;endn=input('n=');x=linspace(-1,1,n);y=1./(1+25.*x.^2);xf=linspace(-1,1,100);yf=1./(1+25.*xf.^2)xl=xf;yl=Untitled8(x,y,xf);plot(xf,yf,'-b',xl,yl,'-r')五、数值结果及分析(数值运行结果及对结果的分析)当n=10时当n=20六、实验体会(计算中出现的问题,解决方法,实验体会)出现符号错误,代码函数变量不明重新输入,查询错误,找到并改正编码需要认真仔细,一定要头脑清晰,避免出现一些低级错误。

龙格库塔实验报告

龙格库塔实验报告

一、实验背景常微分方程(ODE)在自然科学、工程技术等领域中具有广泛的应用。

然而,许多微分方程无法得到精确解析解,因此需要借助数值方法进行求解。

龙格-库塔(Runge-Kutta)方法是一种常用的数值求解常微分方程的方法,具有精度高、稳定性好等优点。

本实验旨在通过编写程序,实现四阶龙格-库塔方法,并验证其在求解常微分方程中的有效性和准确性。

二、实验目的1. 理解四阶龙格-库塔方法的基本原理和计算步骤。

2. 编写程序实现四阶龙格-库塔方法。

3. 选取典型常微分方程,验证四阶龙格-库塔方法的求解精度和稳定性。

三、实验原理四阶龙格-库塔方法是一种基于泰勒级数展开的数值方法,其基本思想是将微分方程的解在某个区间内进行近似,并通过迭代计算得到近似解。

具体步骤如下:1. 初始化:给定初始条件y0,步长h,求解区间[a, b]。

2. 迭代计算:对于k=1, 2, ..., n(n为迭代次数),- 计算k1 = f(xk-1, yk-1)(f为微分方程的右端函数);- 计算k2 = f(xk-1 + h/2, yk-1 + h/2 k1);- 计算k3 = f(xk-1 + h/2, yk-1 + h/2 k2);- 计算k4 = f(xk-1 + h, yk-1 + h k3);- 更新y值:yk = yk-1 + (h/6) (k1 + 2k2 + 2k3 + k4);- 更新x值:xk = xk-1 + h;3. 输出结果:输出最终的近似解y(n)。

四、实验步骤1. 编写程序实现四阶龙格-库塔方法。

2. 选取典型常微分方程,如:- y' = -y,初始条件y(0) = 1,求解区间[0, 2π];- y' = y^2,初始条件y(0) = 1,求解区间[0, 1]。

3. 对每个常微分方程,设置不同的步长h和迭代次数n,分别计算近似解y(n)。

4. 将计算得到的近似解与解析解进行比较,分析四阶龙格-库塔方法的精度和稳定性。

龙格现象

龙格现象
龙格现象
在计算方法中,有利用多项式对某一函数的近似逼近,这样,利用多项式就可以 计算相应的函数值。例如,在事先不知道某一函数的具体形式的情况下,只能测 量得知某一些分散的函数值。例如我们不知道气温随日期变化的具体函数关系, 但是我们可以测量一些孤立的日期的气温值,并假定此气温随日期变化的函数满 足某一多项式。这样,利用已经测的数据,应用待定系数法便可以求得一个多项 式函数 f(x)。应用此函数就可以计算或者说预测其他日期的气温值。一般情 况下,多项式的次数越多,需要的数据就越多,而预测也就越准确。 例外发生了:龙格在研究多项式插值的时候,发现有的情况下,并非取节点(日 期数)越多多项式就越精确。著名的例子是 f(x)=1/(1+25x^2).它的插值函数 在两个端点处发生剧烈的波动,造成较大的误差。究其原因,是舍入误差造成的。 具体的情况可参考下列 Mathematica 程序: n = 10; x = Range[-1, 1, 2/n]; y = 1./(1 + 25 x^2); p = Transpose[{x, y}]; Clear[t]; f = LagrangeInterpolation[x, y, t]; Show[ Plot[{1./(1 + 25 t^2), f}, {t, -1, 1}], ListPlot[p, PlotStyle -> PointSize[0.02]] ] 程序演示 Matlab 程序演示 (一) 代码 >> f=inline('1/6-y/30','t','y'); [t,y]=ode45(f,[0,5],[0]); plot(t,y) >> hold on plot(t,5-5*exp(-t/30面是 MATLAB 中演示插值的 M 文件: %演示龙格函数的插值情况 for i=3:2:11

龙格库塔方法

龙格库塔方法


• 可以通过检查步长折半前后两次计
算结果的偏差
=
(h)
y2 n1

y(h) n1
变步长方
来判断所选取的步长是否合法适
(1)对于给定的精度,如果 ,则反复将步长折半 进行计算直至 为止,这时取折半以后的“ 新值” 作为结果;
四阶RungeKutta方法
这样,下一个值(yn+1)由现在的值(yn)加上时间间隔 (h)和一个估算的斜率的乘积 决定。该斜率是以下斜率的加权平均:
k1是时间段开始时的斜率; k2是时间段中点的斜率,通过欧拉法采用斜率 k1 来 决定 y在点 tn + h/2的值; k3也是中点的斜率,但是这次采用斜率 k2决定 y值; k4是时间段终点的斜率,其 y值用 k3 决定。 当四个斜率取平均时,中点的斜率有更大的权值:
75
0.0033
误差 0.45e-4 0.17e-4 0.15e-4 0.48e-4 0.25e-4 0.55e-4 0.14e-4
y(xn) 1.0954 1.1832 1.2649 1.3416 1.4142 1.4832 1.5492
改进Euler法一步需要计算两个函数值 (h=0.1) 四阶Runge-Kutta方法一步需要计算四 个函数值(h=0.2) 总计算量大致相当,但四阶RungeKutta方法精度更高
设从节点xn出发,先以h为步长求出一个近似值,记为yn(h)1 因为经典格式的局部截断误差为O(h5),因此有
y(xn+1)-y(nh)1 Ch5 其中C与y(5)(x)在[xn, xn1]内的值有关
将步长折半,即取
h 2
为步长从xn跨两步到xn+1,求得一个近似值yn( h21)
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验名称:龙格反例的数值实验
实验目的与要求:
1、了解切比雪夫多项式零点插值;
2、运用切比雪夫多项式零点插值法避免龙格现象。

3、与等距节点构造插值多项式比较。

实验内容:
龙格反例的数值实验
在区间[–5,5 ]上分别取11阶切比雪夫多项式的零点
22
)12(cos 5π+=k x k ( k = 0,1,2,……,10) 和等距节点作插值结点,计算函数211)(x
x f +=在结点处的值 y k = f (x k )。

构造插值多项式L 10(x ),
∑==10
010)()(k k k y x l x L 其中,∏≠=--=n k j j j k j k x x x x x l 0)()()(。

取自变量点 t k = – 5 + 0.05k ( k =0,1,…,201),分别计算切比雪夫零点、等距节点插值多项式L k (x )和被插值函数f (x )在离散点t k ( k =0,1,…,201)上的值,并绘出三条曲线比较。

实验环境与器材:
9#505机房、《数值分析》
实验过程(步骤)或程序代码:
function y=Lagrange(x,n,xx,yy)
sum=0; %初始化
for k=1:n+1
lk=1; %初始化
for i=1:n+1
if k~=i
lk=lk*(x-xx(i))/(xx(k)-xx(i));
end
end
sum=lk*yy(k)+sum;
end
y=sum;
clc
clear
for i=1:11 %下标只能从1开始
x1(i)=-5+10*(i-1)/10;
x2(i)=5*cos((2*i-1)*pi/22);
y1(i)=1/(1+x1(i)*x1(i));
y2(i)=1/(1+x2(i)*x2(i)); %y1,y2分别是在两种节点处得到的函数值
end
h=0.05;
for k=1:202
x3(k)=-5+(k-1)*h;
y11(k)=Lagrange(x3(k),10,x1,y1);
y22(k)=Lagrange(x3(k),10,x2,y2);
y(k)=1/(1+x3(k)*x3(k));
%y11,y22分别为利用切比雪夫零点和等距节点构造出的插值多项式在离散点处的值
end
plot(x3,y11,'r');
hold on
plot(x3,y22,'g');
hold on
plot(x3,y,'b')
%被插值函数在离散点处值的曲线图
hold on
xlabel('-5<=x<=5');
ylabel('y');
legend('f(x)=1/(1+x^2)','等距节点插值多项式','切比雪夫多项式零点插值多项式'); xlim([-5,5])
实验结果与分析:
分析:由高次插值的病态性质,我们知道次数n太高时会出现龙格现象,即L n(x)并不收敛于f(x),由上图我们也可以看到运用等距节点构造的插值多项式的确出现了龙格现象,因此并不适用。

而利用切比雪夫多项式零点做插值,可使插值区间最大误差最小化,就可以避免龙格现象,保证在整个区间上都收敛。

从图中可以看到,用切比雪夫多项式零点作为节点插值得到的多项式曲线图没有出现龙格现象。

成绩:
教师签名:
月日。

相关文档
最新文档