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

合集下载

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

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

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)

数值分析实验报告Hermite插值法、Runge现象,比较Language插值、分段线性插值、分段三次Hermie插值

数值分析实验报告Hermite插值法、Runge现象,比较Language插值、分段线性插值、分段三次Hermie插值

山东师范大学数学科学学院实验报告x 0.1 0.5 1 1.5 2 2.5 3y 0.95 0.84 0.86 1.06 1.5 0.72 1.9y' 1 1.5 2 2.5 3 3.5 4求质点在时刻1.8时的速度,并画出插值多项式的图像。

1)运用Hermite插值法画出图像,如图4-1,并求质点在时刻1.8时的速度。

>>clear>>clc>>X=[0.1 0.5 1 1.5 2 2.5 3;0.95 0.84 0.86 1.06 1.5 0.72 1.9;1 1.5 2 2.5 3 3.5 4];>> x=0.1:0.01:3;>> H=Hermite1(X,x);>> plot(x,H)>> hold on>> plot(X(1,:),X(2,:),'r*')>> H1_8=Hermite(X,1.8);>> plot(1.8,H1_8,'go')>> legend('插值图像','原始点','目标点');图4-1二、验证高次插值的Runge现象问题分析和算法设计(一)Language插值代码function [Ln] =Lagrange(X,x)%请输入2*n+1矩阵X,X中第一行每个元素都是插值节点,X中第二行每个元素都是插值节点对应的函数值;%第二章P24例一拉格朗日插值n=size(X,2);d=0;for m=1:1:nif x==X(1,m);d=m;breakendend运行结果和总结 运行结果 例:给定函数55,11)(2≤≤-+=x xx f ; (1) 验证表2-10的误差结果(高次插值的Runge 现象);(2) 以0.1为步长分别进行Language 插值、分段线性插值、分段三次Hermite插值,画出三种插值函数以及f(x)的图像,比较三种插值结果。

龙格现象

龙格现象

3. 多项式插值的龙格现象考虑在一个固定的区间上用插值逼近一个函数。

显然,拉格朗日插值中使用的节点越多,插值多项式的次数就越高,自然关心插值多项式的次数增加时,()n L x 是否也更加靠近被逼近的函数。

龙格给出的一个例子是极著名并富有启发性的。

设在区间[]1,1-上的函数为:()21125f x x =+,考虑区间[]1,1-的一个等距划分,分点为:21,0,1,2,,iix i nn=-+=则拉格朗日插值多项式为: ()()201125nn i i iL x l x x ==+∑ 其中(),0,1,2,i l x i n =是n 次拉格朗日插值基函数。

要求:(1)选择不断增大的分点数目2,3,n =画出原函数()f x 及插值多项式函数()n L x 在区间[]1,1-的图像,比较并分析实验结果。

解:算法为function lagrangeinterp% graphs of different 'n' clear all;clc x=-1:.01:1;y=1./(1+25.*x.^2); plot(x,y,'-') hold onn=input('n='); x=-1:2/n:1;y=1./(1+25.*x.^2); u=-1:.01:1;v=lagrange(x,y,u);function v = lagrange(x,y,u) % algorithm of lagrange n = length(x); v = zeros(size(u)); for k = 1:nw = ones(size(u)); for j = [1:k-1 k+1:n]w = (u-x(j))./(x(k)-x(j)).*w; endv = v + w*y(k); endplot(x,y,'o',u,v,'--') hold off当选定为2等分时:当选定为3等分时:当选定为5等分时:当选定为10等分时:当选定为15等分时:由上述五个图形可得:在一定范围内,拉格朗日插值中使用的节点越多,插值多项式的L x也更加靠近被逼近的函数,插值节点但并不是越多越好,当超过某一次数就越高,()n值后,就会在端点处出现龙格现象,而且节点越多,龙格现象越严重。

龙格现象结论

龙格现象结论

龙格现象结论龙格现象是指在数值计算中,由于数值误差的积累,计算结果与真实结果之间的误差会随着步长的增加而不断增大的现象。

这一现象在科学计算中具有重要的意义,需要我们认真对待和解决。

龙格现象的出现是由于数值计算过程中的截断误差和舍入误差的积累所致。

在数值计算中,我们往往需要将连续的数学问题转化为离散的数值计算问题,通过有限的计算步骤来近似求解。

然而,由于计算机的存储和计算能力是有限的,无法处理无穷小和无穷大的数值。

因此,在计算过程中,我们不得不进行截断和舍入操作,从而引入了误差。

在数值计算中,我们通常使用一些数值方法来近似求解数学问题,如数值积分、数值微分和常微分方程的数值解等。

这些数值方法本质上都是基于一些数值逼近和插值的原理。

而在这些数值方法中,步长的选择是非常重要的。

步长过大会导致精度降低,步长过小则会增加计算的复杂性。

而龙格现象则是指当步长过大时,数值误差的积累会导致计算结果的不准确性。

为了更好地理解龙格现象,我们可以通过一个简单的例子来说明。

假设我们要计算一个函数的积分,我们可以使用数值积分的方法来近似求解。

首先,我们将积分区间等分为若干小区间,然后通过插值方法来近似计算每个小区间的积分。

当步长较小时,插值近似的误差也较小,计算结果较为准确。

但当步长增大时,插值近似的误差也会随之增大,最终导致计算结果的不准确。

针对龙格现象,我们可以通过一些方法来减小误差和提高计算精度。

首先,我们可以选择合适的数值方法和步长,以平衡计算精度和计算复杂性。

其次,我们可以使用高精度的数值计算库或算法,以减小舍入误差。

此外,我们还可以结合数值计算和符号计算的方法,以提高计算精度和可靠性。

龙格现象是数值计算中不可忽视的问题,它提醒我们在进行数值计算时要谨慎选择步长和数值方法,以保证计算结果的准确性。

同时,我们也需要不断研究和改进数值计算的方法和算法,以提高计算精度和可靠性,为科学计算提供更加准确和可靠的结果。

龙格库塔实验报告

龙格库塔实验报告

龙格库塔实验报告龙格库塔实验报告引言:龙格库塔法(Runge-Kutta method)是一种常用的数值求解常微分方程(ODE)的方法。

它是由德国数学家卡尔·龙格(Carl Runge)和马丁·威尔海姆·库塔(Martin Wilhelm Kutta)于19世纪末独立发展而来。

龙格库塔法通过将微分方程转化为一系列逼近值,从而实现对微分方程的数值求解。

本实验旨在通过对龙格库塔法的研究和实践,深入了解其原理和应用。

一、龙格库塔法的原理龙格库塔法的基本思想是将微分方程的解分解为一系列逼近值,然后通过逐步迭代的方式计算这些逼近值。

具体而言,龙格库塔法将求解微分方程的过程分为多个步骤,每个步骤都计算一个逼近值,并利用这些逼近值逐步逼近真实解。

二、龙格库塔法的步骤1. 确定微分方程和初始条件:首先,需要明确待求解的微分方程以及初始条件。

微分方程可以是一阶或高阶的,初始条件是方程在某一点上的已知值。

2. 确定步长:步长(或称为时间间隔)决定了逼近值的精度。

较小的步长能够提高逼近值的准确性,但也会增加计算量。

因此,需要根据具体问题的需求选择合适的步长。

3. 迭代计算:根据龙格库塔法的公式,进行逐步的迭代计算。

首先,根据初始条件计算出第一个逼近值。

然后,利用该逼近值和微分方程的导数计算出下一个逼近值。

重复这一过程,直到达到所需的迭代次数或满足精度要求。

4. 计算误差:为了评估逼近值的准确性,需要计算误差。

误差可以通过与解析解的比较得出,或者通过比较不同步长下的逼近值得出。

较小的误差表明逼近值较为准确。

三、龙格库塔法的应用龙格库塔法广泛应用于科学和工程领域,特别是在求解微分方程模型的数值计算中。

以下是一些常见的应用场景:1. 物理学:龙格库塔法可以用于模拟物体在重力场中的运动,如自由落体、抛体运动等。

通过求解微分方程,可以得到物体的位置、速度等随时间的变化规律。

2. 经济学:龙格库塔法可以用于经济学模型的求解,如经济增长模型、投资模型等。

(完整版)龙格函数

(完整版)龙格函数
p(k,3)=(y(k)-m(k)*(x(k+1)-x(k))^2/6)/(x(k+1)-x(k));
p(k,4)=(y(k+1)-m(k+1)*(x(k+1)-x(k))^2/6)/(x(k+1)-x(k));
sx(k)=p(k,1)*(x(k+1)-t)^3+p(k,2)*(t-x(k))^3+p(k,3)*(x(k+1)-t)+p(k,4)*(t-x(k));
s=p*y0(k)+s;
end
y(i)=s;
end
建立一个polynomial.m文件,用于多项式插值的实现,代码如下:
%lagrange插值
n=10
x=[-1:0.2:1];
y=1./(1+25*x.^2);
x0=[-1:0.02:1];
y0=lagrange(x,y,x0);
y1=1./(1+25*x0.^2);
对龙格函数 在区间[-1,1]上取n=10,20等距节点,分别作多项式插值、三次样条插值比较各结果。
1、多项式插值:
在区间[-1,1]上取n=10,20等距节点,带入拉格朗日插值多项式中,求出各个节点的插值,并利用matlab软件建立m函数,画出其图形。
在matlab中建立一个lagrange.m文件,里面代码如下:
end
A=eye(n,n)*2;
for k=1:n-1
A(k,k+1)=r(k);
A(k+1,k)=u(k);
end
m=A\d;
ft=d(1);
syms t
for k=1:n-1 %求s(x)即插值多项式

龙格现象实验报告

龙格现象实验报告
那么如何提高插值精度呢?采用分段插值是一种办法。




欢迎您的下载,
资料仅供参考!
致力为企业和个人提供合同协议,策划案计划书,学习资料等等
打造全网一站式需求
x=[-5:0.1:5];
y=lagrange(x0,y0,x);
y1=5./(1+x.^2);
plot(x,y,'--r')
hold on
plot(x,y1,'-b')
hold off
2)取n=10
x0=[-5:1:5];
y0=5./(0.25*0.25+x0.^2);
x=[-5:0.1:5];
y=lagrange(x0,y0,x);
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;
x0=[-5:1:5];
y0=5./(1+x0.^2);
x=[-5:0.1:5];
y=lagrange(x0,y0,xБайду номын сангаас;
y1=5./(1+x.^2);
plot(x,y,'--r')
hold on
plot(x,y1,'-b')
hold off
2、a=0.25时,
1)取n=4

数值分析龙格库塔

数值分析龙格库塔

随着计算机的迅速发展和广泛应用,在众多领域内,我们越来越认识到科学计算是科学研究的重要方法。

数值计算方法是一种利用计算机解决数学问题的数值近似解方法,特别是无法用人工过计算器计算的数学问题。

数值计算方法常用于矩阵高次代数方程矩阵特征值与特征向量的数值解法,插值法,线性方程组迭代法,函数逼近,数值积分与微分,常微分方程初值问题数值解等。

作为数学与计算机之间的一条通道,数值计算的应用范围已十分广泛,作为用计算机解决实际问题的纽带,数值算法在求解线性方程组,曲线拟合、数值积分、数值微分,迭代方法、插值法、拟合法、最小二乘法等应用广泛。

数值计算方法是和计算机紧密相连的,现代计算机的出现为大规模的数值计算创造了条件,集中而系统的研究适用于计算机的数值方法是十分必要的。

数值计算方法是在数值计算实践和理论分析的基础上发展起来的。

通过数值计算方法与实验将有助于我们理解和掌握数值计算方法基本理论和相关软件的掌握,熟练求解一些数学模和运算。

并提高我们的编程能力来解决实际问题。

对于本次计算方法与实习的实践环节,我们采用改进欧拉(Euler)方法对给定的数据进行分析,改进的欧拉(Euler)方法是解决常微分方程初值问题常用的数值解法,本文在简要介绍改进欧拉(Euler)方法及四阶龙格库塔公式的基础上,通过编写C语言程序实现两种数值算法。

通过本次实践环节,我们很好的了解了常微分方程数值解法的原理。

出色的完成了本次课程设计。

关键词:欧拉方法;四阶龙格--库塔;C语言;数值分析前言 ............................................................ - 0 - 摘要 ............................................................ - 1 - 实验设计内容 .................................................... - 3 - 一.实验目的................................................. - 3 - 二.实验内容................................................. - 3 - 三.实验算法................................................. - 3 - 四.实验程序................................................. - 4 -⑴改进欧拉方法 ........................................... - 4 -⑵四阶龙格库塔方法 ....................................... - 5 - 实验心得 ........................................................ - 7 -实验设计内容一.实验目的1) 熟悉求解常微分方程初值问题的有关方法和理论,主要是改进欧拉法、四阶龙格-库塔法;2) 会编制上述方法的计算程序,包括求解微分方程组的计算程序。

实验:龙格现象

实验:龙格现象
10bctintegeropen10fileffdatk10t200kdo1010continuedo1515continuedo20do30fijfij1fi1j102j30continue20continuedo40k01000s1k2010000cf00do50i110b10do60j0i160continue50continuewrite108080format1xe209e20940continueenddoubleprecisionabchxxx10open10fileffdatkk10h20kka10dok10b00docontinuedo10c10do20i10kc10elsecxxxi1xxjxxi1end20continuebbc125xxjxxj10continuewrite105050format1xe209e209continueend用最小二乘拟合求一个形如192531384419323497339780972600515141414141516143212828求arctanx在区间01上的最佳平方一次式004291079183在区间01上的最佳平方一次式在区间01上的最佳平方二次式
x 19 25 31 38 44 y 19 32.3 49 73.3 97.8
a 0 .9 7 2 6 b 0 .0 5
用二次多项式拟合
x0123456 y 15 14 14 14 14 15 16
yy 1 4, x x 3
x -3 -2 -1 0 1 2 3 y1000012
y1415(x3)5(x3)2
x(i)=-1+t*(i) 10 continue
do 15 i=0,k
do 40 k=0,1000
s=-1+k*2.0/1000.0

龙格现象matlab程序

龙格现象matlab程序

龙格现象matlab程序龙格现象(Runge's Phenomenon)是数值分析中的一个现象,指的是在使用等距节点进行插值时,当节点数量增多时,插值多项式会出现振荡的现象。

这个现象最早由德国数学家卡尔·龙格(Carl Runge)于1901年发现,因此得名。

龙格现象的产生是由于等距节点在插值中的特殊性质导致的。

在等距节点插值中,节点的间距是相等的,例如在区间[-1,1]上选择n 个等距节点。

利用这些节点进行插值,我们可以得到一个n次多项式来拟合所给的函数。

然而,当n增大时,插值多项式在区间的两个端点附近会出现振荡现象,即多项式值在两个端点附近迅速增大然后迅速减小,最终达到函数值的波动。

为了更好地理解龙格现象,我们可以通过一个简单的例子来说明。

考虑函数f(x)=1/(1+25x^2),我们在区间[-1,1]上选择不同数量的等距节点进行插值。

首先,选择5个等距节点进行插值,得到插值多项式P5(x)。

在图表中我们可以观察到,P5(x)在区间的两个端点附近出现了振荡现象。

随着节点数量的增加,振荡现象变得更加明显。

当节点数量增加到10时,插值多项式P10(x)的振荡现象更加明显。

这说明了龙格现象的存在。

为了解决龙格现象,我们可以采用非等距节点进行插值。

非等距节点插值可以通过使用更加合适的节点分布来减小振荡现象。

例如,在区间[-1,1]上使用Chebyshev节点进行插值可以有效地减小龙格现象的影响。

龙格现象在实际应用中具有重要的意义。

在数值计算中,我们经常需要使用插值来近似函数值。

如果不了解龙格现象,仅仅选择等距节点进行插值可能会导致误差的增大。

因此,了解龙格现象的存在和原因对于选择合适的插值方法具有重要的指导意义。

龙格现象是等距节点插值中的一个振荡现象,会导致插值多项式在区间的两个端点附近出现振荡。

为了解决龙格现象,可以采用非等距节点进行插值。

了解龙格现象的存在和原因对于数值计算具有重要的指导意义。

龙格—库塔法分析Lorenz方程课程设计

龙格—库塔法分析Lorenz方程课程设计

《数值分析》课程设计实验报告龙格—库塔法分析Lorenz 方程一、问题叙述考虑著名的Lorenz 方程()dxs y x dt dyrx y xz dt dzxy bz dt ⎧=-⎪⎪⎪=--⎨⎪⎪=-⎪⎩其中s ,r ,b 为变化区域内有一定限制的实参数,该方程形式简单,表面上看并无惊人之处,但由该方程揭示出的许多现象,促使“混沌”成为数学研究的崭新领域,在实际应用中也产生了巨大的影响。

二、问题分析Lorenz 方程实际上是一个四元一阶常微分方程,用解析法精确求解是不可能的,只能用数值计算,最主要的有欧拉法、亚当法和龙格- 库塔法等。

为了得到较高精度的,我们采用经典四阶龙格—库塔方法求解该问题。

三、实验程序及注释(1)算法程序function [T]=Runge_Kutta(f,x0,y0,h,n) %定义算法,其中f 为待解方程组,x0是初始自变量,y0是初始函数值,h 是步长,n 为步数if nargin<5n=100; %如果输入参数个数小于5,则步数n=100endr=size(y0);r=r(1); %返回初始输出矩阵的行列数,并将值赋给r(1)s=size(x0);s=s(1); %返回初始输入矩阵的行列数,并将值赋给s(1)r=r+s;T=zeros(r,n+1); T(:,1)=[y0;x0];for t=2:n+1 %以下是具体的求解过程 k1=feval(f,T(1:r-1,t-1));k2=feval(f,[k1*(h/2)+T(1:r-1,t-1);x0+h/2]); k3=feval(f,[k2*(h/2)+T(1:r-1,t-1);x0+h/2]); k4=feval(f,[k3*h+T(1:r-1,t-1);x0+h]); x0=x0+h;T(:,t)=[T(1:r-1,t-1)+(k1+k2*2+k3*2+k4)*(h/6);x0]; end(2)主程序function dy=fun(x) %定义函数s=10.0; %给参数s,r,b赋值r=28.0;b=8.0/3;dy(1)=s*(x(2)-x(1)); %Lorenz方程表达式dy(2)=(r*x(1)-x(3)*x(1)-x(2));dy(3)=x(1)*x(2)-b*x(3);dy=dy';(2)运行程序T=Runge_Kutta('fun',0,[10;10;10],0.01,5000); %调用前面的算法程序plot3(T(1,:),T(2,:),T(3,:)); %显示三分量的关系图axis([-20 20 -50 50 0 50]) %定义坐标轴长度view(3) %设定观察角度四、实验数据结果及分析(1)各初始变量相同时的图像分析各初始变量取相同的值[10,10,10],运行上述程序后,得到如下图像:从图中可以看出,各初始变量相同时,曲线总是被吸引回奇怪吸引子附近作来回跳跃。

龙格-库塔法

龙格-库塔法

龙格-库塔法格-库塔法(Runge—Kutta)数值分析中,龙格-库塔法(Runge-Kutta)是用于模拟常微分方程的解的重要的一类隐式或显式迭代法。

这些技术由数学家卡尔·龙格和马丁·威尔海姆·库塔于1900年左右发明.经典四阶龙格库塔法龙格库塔法的家族中的一个成员如此常用,以至于经常被称为“RK4”或者就是“龙格库塔法”。

令初值问题表述如下。

则,对于该问题的RK4由如下方程给出:其中这样,下一个值(y n+1)由现在的值(y n)加上时间间隔(h)和一个估算的斜率的乘积决定.该斜率是以下斜率的加权平均:•k1是时间段开始时的斜率;•k2是时间段中点的斜率,通过欧拉法采用斜率k1来决定y在点t n + h/2的值;•k3也是中点的斜率,但是这次采用斜率k2决定y值;•k4是时间段终点的斜率,其y值用k3决定.当四个斜率取平均时,中点的斜率有更大的权值:RK4法是四阶方法,也就是说每步的误差是h5阶,而总积累误差为h4阶。

注意上述公式对于标量或者向量函数(y可以是向量)都适用。

显式龙格库塔法显示龙格-库塔法是上述RK4法的一个推广。

它由下式给出其中(注意:上述方程在不同著述中由不同但却等价的定义)。

要给定一个特定的方法,必须提供整数s (阶段数),以及系数 a ij (对于1 ≤ j < i ≤ s), b i (对于i = 1, 2, ..。

, s)和c i(对于i = 2, 3,。

.., s).这些数据通常排列在一个助记工具中,称为龙格库塔表:0 c2 a21 c3 a31 a32c s a s1 a s2a s,s − 1 b1 b2b s − 1 b s龙格库塔法是自洽的,如果如果要求方法有精度p则还有相应的条件,也就是要求舍入误差为O(h p+1)时的条件。

这些可以从舍入误差本身的定义中导出。

例如,一个2阶精度的2段方法要求b1 + b2 = 1,b2c2 = 1/2,以及b2a21 = 1/2。

  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),由上图我们也可以看到运用等距节点构造的插值多项式的确出现了龙格现象,因此并不适用。

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

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

成绩:
教师签名:
月日。

相关文档
最新文档