龙格现象实验报告1
- 格式:doc
- 大小:60.00 KB
- 文档页数:6
关于龙格现象的实验报告1.实验目的:观察拉格朗日插值的龙格(Runge)现象.。
2. 实验内容: 对于函数211)(xx f +=进行拉格朗日插值,取不同的节点数n ,在区间[-5,5]上取等距间隔的节点为插值点,把f (x )和插值多项式的曲线画在同一张图上进行比较。
具体步骤如下:1)、编写拉格朗日插值函数(并将其存到当前路径的M 文件中)function y=lagrange(x0,y0,x)n=length(x0);m=length(x);for i=1:mz=x(i);L=0.0;for j=1:nT=1.0;for k=1:nif k~=jT=T*(z-x0(k))/(x0(j)-x0(k));endendL=T*y0(j)+L;endy(i)=L;end2)、取不同的n 值(注:当n 值不同时,间距间隔10/n 也在发生改变,程序中只需改变x0=-5:10/n:5中的n 值)。
现取n 分别等于4,6,8,10时,程序分别如下(1)取n =4,>> x0=-5:10/4: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,'-.r')>>(2)取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')>>(3)取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 on>> plot(x,y,'--g')>>(4)取n=10,>> x0=-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 on>> plot(x,y,'--m')>>(5)依次输入上述程序,将f(x)和取不同节点数的插值多项式的曲线画在同一张图上进行比较。
1 / 21数值分析实验二:插值法1 多项式插值的震荡现象1.1 问题描述考虑一个固定的区间上用插值逼近一个函数。
显然拉格朗日插值中使用的节点越多,插值多项式的次数就越高。
我们自然关心插值多项式的次数增加时, 是否也更加靠近被逼近的函数。
龙格(Runge )给出一个例子是极著名并富有启发性的。
设区间[-1,1]上函数21()125f x x=+ (1)考虑区间[-1,1]的一个等距划分,分点为n i nix i ,,2,1,0,21 =+-= 则拉格朗日插值多项式为201()()125nn ii iL x l x x ==+∑(2)其中的(),0,1,2,,i l x i n =是n 次拉格朗日插值基函数。
实验要求:(1) 选择不断增大的分点数目n=2, 3 …. ,画出原函数f(x)及插值多项式函数()n L x 在[-1,1]上的图像,比较并分析实验结果。
(2) 选择其他的函数,例如定义在区间[-5,5]上的函数x x g xxx h arctan )(,1)(4=+=重复上述的实验看其结果如何。
(3) 区间[a,b]上切比雪夫点的定义为 (21)cos ,1,2,,1222(1)k b a b ak x k n n π⎛⎫+--=+=+ ⎪+⎝⎭(3)以121,,n x x x +为插值节点构造上述各函数的拉格朗日插值多项式,比较其结果,试分析2 / 21原因。
1.2 算法设计使用Matlab 函数进行实验, 在理解了插值法的基础上,根据拉格朗日插值多项式编写Matlab 脚本,其中把拉格朗日插值部分单独编写为f_lagrange.m 函数,方便调用。
1.3 实验结果1.3.1 f(x)在[-1,1]上的拉格朗日插值函数依次取n=2、3、4、5、6、7、10、15、20,画出原函数和拉格朗日插值函数的图像,如图1所示。
Matlab 脚本文件为Experiment2_1_1fx.m 。
可以看出,当n 较小时,拉格朗日多项式插值的函数图像随着次数n 的增加而更加接近于f(x),即插值效果越来越好。
一、实验背景常微分方程(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. 将计算得到的近似解与解析解进行比较,分析四阶龙格-库塔方法的精度和稳定性。
实验报告实验课程名称数值计算方法I开课实验室数学实验室学院理学院年级2012 专业班信息与计算科学2班学生姓名学号开课时间2012 至2013 学年第 2 学期实验一 误差分析试验1.1(病态问题)问题提出:考虑一个高次的代数多项式)1.1()()20()2)(1()(201∏=-=---=k k x x x x x p显然该多项式的全部根为1,2,…,20共计20个,且每个根都是单重的。
现考虑该多项式的一个扰动)2.1(0)(19=+x x p ε其中ε是一个非常小的数。
这相当于是对(1.1)中19x 的系数作一个小的扰动。
我们希望比较(1.1)和(1.2)根的差别,从而分析方程(1.1)的解对扰动的敏感性。
实验内容:为了实现方便,我们先介绍两个MA TLAB 函数:“roots ”和“poly ”。
roots(a)u =其中若变量a 存储n+1维的向量,则该函数的输出u 为一个n 维的向量。
设a 的元素依次为121,,,+n a a a ,则输出u 的各分量是多项式方程01121=+++++-n n n n a x a x a x a的全部根;而函数 poly(v)b =的输出b 是一个n+1维向量,它是以n 维向量v 的各分量为根的多项式的系数。
可见“roots ”和“poly ”是两个互逆的运算函数。
))20:1((;)2();21,1(;000000001.0ve poly roots ess ve zeros ve ess +===上述简单的MA TLAB 程序便得到(1.2)的全部根,程序中的“ess ”即是(1.2)中的ε。
实验要求:(1)选择充分小的ess ,反复进行上述实验,记录结果的变化并分析它们。
如果扰动项的系数ε很小,我们自然感觉(1.1)和(1.2)的解应当相差很小。
计算中你有什么出乎意料的发现?表明有些解关于如此的扰动敏感性如何?(2)将方程(1.2)中的扰动项改成18x ε或其它形式,实验中又有怎样的现象? (3)(选作部分)请从理论上分析产生这一问题的根源。
山东师范大学数学科学学院实验报告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)的图像,比较三种插值结果。
摘要求函数在给定区间上的定积分,在微积分学中已给出了许多计算方法,但是,在实际问题计算中,往往仅给出函数在一些离散点的值,它的解析表达式没有明显的给出,或者,虽然给出解析表达式,但却很难求得其原函数。
这时我们可以通过数值方法求出函数积分的近似值。
在用近似值代替真实值时,遇到的问题就是近似值的代数精度是否足够。
当代数精度不足够时,很显然提高插值函数的次数是一种方法,但是考虑到数值计算的稳定性,当次数过高时,会出现龙格现象,用增大n的方法来提高数值积代数精度是不可取的。
因此,提出类似于分段插值,为了减少数值积分的误差,可以把积分区间分成若干个小区间,在每个小区间上采用低阶数值积分公式,然后把这些小区间上的数值积分结果加起来作为函数在整个区间上的近似值,这个就是复化数值积分的思想。
本实验针对在每个小区间上利用梯型积分公式,即阶数为1,进行实验。
关键词:龙格现象复化数值积分代数精度1、实验目的1)通过本次实验体会并学习龙贝格积分公式的优点。
2)通过对龙贝格积分公式进行编程实现,提高自己的编程能力。
3)用实验报告的形式展现,提高自己在写论文方面的能力。
2、算法流程如果将区间a,b n等分,则复化梯形公式为f x dx≈ba T n=ℎ2f a+2f x k+f(b)n−1k=1现变步长,将区间a,b2n等分,则有f x dx= baf(x)dxx ix i−1=f(x)dxx i−1/2x i−1+f(x)dxx ix i−1/2ni=1ni=1≈ℎ22f x i−1+2f xi−12+f x ini=1=ℎ4f a+2f x i+f bn−1i=1+2f xi−12n−1i=1=12T n+ℎ2f a+ i−12ℎni=1令H n=ℎf a+ i−12ℎni=1这时T2n=12T n+12H n对于复化Simpson公式,可以发现S n能表示为如下形式S n=13T n+23H n将T 2n 和上式综合得到S n =4T 2n −T n 4−13、算法实例设I = 41+x 210dx ,用龙贝格积分公式求解积分,并设置精度。
数值分析实验报告实验一、解线性方程组的直接方法——梯形电阻电路问题利用追赶法求解三对角方程组的方法,解决梯形电阻电路问题:电路中的各个电流{1i ,2i ,…,8i }须满足下列线性方程组:R V i i =- 22 210 252321=-+-i i i 0 252 432=-+-i i i 0 252 543=-+-i i i 0 252 654=-+-i i i 0 252 765=-+-i i i 0 252 876=-+-i i i 052 87=+-i i设V 220=V ,Ω=27R ,运用追赶法,求各段电路的电流量。
问题分析:上述方程组可用矩阵表示为:⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡--------------00000001481.8522520000002520000002520000002520000002520000002520000002287654321i i i i i i i i问题转化为求解A x b =,8阶方阵A 满足顺序主子式(1,2...7)0i A i =≠,因此矩阵A存在唯一的Doolittle 分解,可以采用解三对角矩阵的追赶法!追赶法a=[0 -2 -2 -2 -2 -2 -2 -2]; b=[2 5 5 5 5 5 5 5];c=[-2 -2 -2 -2 -2 -2 -2 0]; d=[220/27 0 0 0 0 0 0 0];Matlab 程序function x= zhuiganfa( a,b,c,d )%追赶法实现要求:|b1|>|C1|>0,|bi|>=|ai|+|ci| n=length(b); u=ones(1,n); L=ones(1,n); y=ones(1,n); u(1)=b(1); y(1)=d(1); for i=2:nL(i)=a(i)/u(i-1);u(i)=b(i)-c(i-1)*L(i); y(i)=d(i)-y(i-1)*L(i); endx(n)=y(n)/u(n); for k=n-1:-1:1x(k)=(y(k)-c(k)*x(k+1))/u(k); end endMATLAB 命令窗口输入:a=[0 -2 -2 -2 -2 -2 -2 -2]; b=[2 5 5 5 5 5 5 5];c=[-2 -2 -2 -2 -2 -2 -2 0] d=[220/27 0 0 0 0 0 0 0];x= zhuiganfa(a,b,c,d )运行结果为:x =8.1478 4.0737 2.0365 1.0175 0.5073 0.2506 0.1194 0.0477存在问题根据电路分析中的所讲到的回路电流法,可以列出8个以回路电流为独立变量的方程,课本上给出的第八个回路电流方程存在问题,正确的应该是78240i i -+=;或者可以根据电路并联分流的知识,同样可以确定78240i i -+=。
龙格—库塔法解常微分方程实验报告一、实验题目求解初值问题⎪⎩⎪⎨⎧=<<-=1)0()10(2'y x y x y y二、实验引言1、实验目的进一步理解龙格—库塔方法的设计思路和算法流程,培养动手实践能力和分析能力。
2、实验意义龙格—库塔方法的推导基于泰勒展开方法,因而它要求的解具有较好的光滑性质。
反之,如果解得光滑性差,那么,使用四阶龙格—库塔法方法求得的数值解,其精度可能反而不如梯形方法。
实际计算中,应当针对问题的具体特点选择合适的算法。
三、算法设计1. 基本思想由Lagrange 微分中值定理,11()()'()()()(,())n n n n n y x y x y x x y x hf y ξξξ++=+-=+记*(,())k hf y ξξ=,则得到*1()()n n y x y x k +=+这样,给出*k 的一种算法,就得到求解微分方程初值问题的一种计算公式。
四阶龙格_库塔法是用1k ,2k ,3k 和4k 的加权平均值来近似*k 。
最经典的四阶龙格—库塔公式为:121324311234(,)(,)22(,)22(,)y (22)2n n n n n nn n n n K f x y h h K f x y K h h K f x y K K f x h y hK h y K K K K +=⎧⎪⎪=++⎪⎪⎪=++⎨⎪=++⎪⎪⎪=++++⎪⎩四阶龙格—库塔法的误差估计局部截断误差为5()O h 。
2.算法流程图四、程序设计program longgekutaimplicit nonereal,parameter::b=1real::h=0.2integer::nreal::x,K1,K2,K3,K4,yreal,external::fx=0y=1open (unit=10,file='1.txt')do while(x<=b)K1=f(x,y)K2=f(x+h/2,y+K1*h/2)K3=f(x+h/2,y+K2*h/2)K4=F(x+h,y+K3*h)y=y+(k1+2*K2+2*K3+K4)*h/6 x=x+hwrite(10,*) x,yend doendfunction f(x,y)implicit nonereal::f,x,yf=y-2*x/yend function五、结果及讨论1.实验结果0.2000000 1.183229 0.4000000 1.341667 0.6000000 1.4832810.8000000 1.6125141.000000 1.7321421.200000 1.844040六、算法评价1、本次实验实现了常微分方程初值问题数值解法中的四阶龙格—库塔法2、对欧拉法和龙格—库塔法进行比较:在相同步长的情况下,欧拉法每步只计算一个函数值,四阶龙格—库塔法每步需计算四个函数值,就是说,四阶龙格—库塔法的计算量差不多是欧拉法的四倍,为了比较它们的计算精度,可以将欧拉法的步长取为h,将四阶龙格—库塔法的步长取为4h。