龙格现象

龙格现象
龙格现象

二.主要方、步骤:

1.运用FORTRAN编制原函数,拉格朗日插值和线性插值程序;

2.将数据运用grapher将实验数据绘制成图.

三.程序代码:

!龙格现象/高次插值的病态性质

PROGRAM LONGERend

parameter(n=10)

real(8) y(0:20),x(0:20),x1(0:20),y1(0:20),Ih(0:20)

!计算f(x)

open(2,file='y.doc')

write(2,"('x',30x,'f(x)')")

do i=0,n

x(i)=-5.0+10*i/n

y(i)=1.0/(1+x(i)**2)

write(2,*) x(i), y(i)

end do

!计算Ln(x),拉格朗日插值程序

OPEN(2,file='y1.doc')

write(2,"('x1',30x,'Ln(x)')")

do i=0,n-1

x1(i)=(x(i)+x(i+1))/2

y1(i)=0.0

do j=0,n

!计算Wn+1(x),W'n+1(x)

w=1.0

wp=1.0

do k=0,n

w=w*(x1(i)-x(k))

if(k/=j) then

wp=wp*(x(j)-x(k))

end if

end do

y1(i)=y1(i)+y(j)*w/wp/(x1(i)-x(j))

end do

write(2,*) x1(i),y1(i)

end do

!分段线性插值程序

open(2,file='Ih.doc')

write(2,"('x1',30x,'Ih')")

do k=0,n-1

Ih(k)=(x1(k)-x(k+1))/(x(k)-x(k+1))*y(k)+(x1(k)-x(k))/(x(k+1)-x(k))*y( k+1)

write(2,*) x1(k),Ih(k)

end do

print*,'数据已写入指定文件'

end

四.数值结果:

x f(x)

-5.00000000000000 3.846153846153846E-002 -4.00000000000000 5.882352941176471E-002 -3.00000000000000 0.100000000000000 -2.00000000000000 0.200000000000000 -1.00000000000000 0.500000000000000

0.000000000000000E+000 1.00000000000000

1.00000000000000 0.500000000000000

2.00000000000000 0.200000000000000

3.00000000000000 0.100000000000000

4.00000000000000

5.882352941176471E-002

5.00000000000000 3.846153846153846E-002

x1 Ln(x)

-4.50000000000000 1.57872102169562 -3.50000000000000 -0.226196282498366 -2.50000000000000 0.253755465606773 -1.50000000000000 0.235346591310803 -0.500000000000000 0.843407429828903

0.500000000000000 0.843407429828903

1.50000000000000 0.235346591310803

2.50000000000000 0.253755465606773

3.50000000000000 -0.226196282498366

4.50000000000000 1.57872102169562

x1 Ih

-4.50000000000000 4.864253393665158E-002 -3.50000000000000 7.941176470588235E-002 -2.50000000000000 0.150000000000000 -1.50000000000000 0.350000000000000 -0.500000000000000 0.750000000000000

0.500000000000000 0.750000000000000

1.50000000000000 0.350000000000000

2.50000000000000 0.150000000000000

3.50000000000000 7.941176470588235E-002

4.50000000000000 4.864253393665158E-002

Grapher制图部分:

原函数图像:

f(x)

x 拉格朗日插值函数图像:

Ln(x)

x

分段线性插值函数图象:

Ih(x)

x原函数

五.数值结果分析:

○1.从拉格朗日插值函数图象与原函数图像的对比可看出:随着自变量|x︱的增大Ln(x)与f(x)总体上呈现出偏离越来越远的效果;

○2.从分段线性插值函数图象与原函数图像的对比可看出:二者较为近似,

拉格线性插值函数能较好的逼近原函数;

从以上两点可以看出,高次插值多项式Ln(x)近似的效果并不一定好,而通过分段线性插值多项式则能很好的避免高次插值的病态现象。

六.实验收获和体会:

收获:1.能熟练的运用FORTRAN编制原函数,拉格朗日插值和线性插值程序;

2.能够运用grapher将实验数据绘制成图。

体会:由于FORTRAN还处在学习阶段,导致编写程序花掉了较长时间;而且由于不会该程序的有格式输出,导致数据绘图阶段花费了更多的功夫。

数值分析实验报告(0002)

数值分析实验报告

数值分析实验报告 姓名:张献鹏 学号:173511038 专业:冶金工程 班级:重冶二班

目录 1拉格朗日插值 (1) 1.1问题背景 (1) 1.2数学模型 (1) 1.3计算方法 (1) 1.4数值分析 (2) 2复化辛普森求积公式 (2) 2.1问题背景 (2) 2.2数学模型 (3) 2.3计算方法 (3) 2.4数值分析 (5) 3矩阵的LU分解 (6) 3.1问题背景 (6) 3.2数学模型 (6) 3.2.1理论基础 (6) 3.2.2实例 (7) 3.3计算方法 (7) 3.4小组元的误差 (8) 4二分法求方程的根 (9) 4.1问题背景 (9) 4.2数学模型 (9) 4.3计算方法 (9) 4.4二分法的收敛性 (11) 5雅可比迭代求解方程组 (11) 5.1问题背景 (11) 5.2数学模型 (11) 5.2.1理论基础 (11) 5.2.2实例 (12)

5.3计算方法 (12) 5.4收敛性分析 (13) 6Romberg求积法 (14) 6.1问题背景 (14) 6.2数学模型: (14) 6.2.1理论基础 (14) 6.2.2实例 (14) 6.3计算方法 (15) 6.4误差分析 (16) 7幂法 (16) 7.1问题背景 (16) 7.2数学模型 (16) 7.2.1理论基础 (16) 7.2.2实例 (17) 7.3计算方法 (17) 7.4误差分析 (18) 8改进欧拉法 (18) 8.1问题背景 (18) 8.2数学模型 (19) 8.2.1理论基础 (19) 8.2.2实例 (19) 8.3数学模型 (19) 8.4误差分析 (21)

实验二 拉格朗日插值龙格现象

汕 头 大 学 实 验 报 告 学院: 工学院系: 计算机系专业: 计算机科学与技术年级:2010 姓名: 林金正学号:2010101032完成实验时间: 5月24日 一.实验名称:拉格朗日插值的龙格现象 二.实验目的: 通过matlab 处理,观察拉格朗日插值的龙格现象. 三.实验内容: (1)学习matlab 的使用 (2)以实验的方式,理解高阶插值的病态性,观察拉格朗日插值的龙格现象。 四.实验时间、地点,设备: 实验时间:5月24日 实验地点:宿舍 实验设备:笔记本电脑 五,实验任务 在区间[-5,5]上取节点数n=11,等距离h=1的节点为插值点,对于函数2 5()1f x x =+进行拉格朗日插值,把f(x)与插值多项式的曲线花在同一张图上。 六.实验过程 拉格朗日插值函数定义: 对某个多项式函数,已知有给定的k + 1个取值点: 其中对应著自变数的位置,而对应著函数在这个位置的取值。 假设任意两个不同的xj 都互不相同,那麼应用拉格朗日插值公式所得到的拉格朗日插值多项式为: 其中每个为拉格朗日基本多项式(或称插值基函数),其表达式为: [3] 拉格朗日基本多项式 的特点是在上取值为1,在其它的点上取值为0。

1.使用matlab,新建function.m 文件,使用老师所给代码,构建拉格朗日函数. %lagrange.m function y=lagrange(x0,y0,x) n=length(x0); m=length(x); fori=1:m z=x(i);s=0; for k=1:n L=1; for j=1:n if j~=k L=L*(z-x0(j))/(x0(k)-x0(j)); end end s=s+L*y0(k); end y(i)=s; end y; 程序解释: (x0,y0):已知点坐标 x:所求点的横坐标, y:由(x0,y0)所产生的插值函数,以x 为参数,所的到的值 2.再一次新建function.m 文件. 构建自定义函数:25()1f x x = + %f.m function y = f(x) y = 5/(1+x*x); end 3.在脚本窗口中输入: >>a = [-10:0.2:10] >>for I = 1:length(a) b(i) = f(a(i)) end ;%画出原函数(a,b) >>c = [-5:1:5] >>for i = 1:length( c) d(i) = f(c(i))

数值分析实验报告2

实验报告 实验项目名称函数逼近与快速傅里叶变换实验室数学实验室 所属课程名称数值逼近 实验类型算法设计 实验日期 班级 学号 姓名 成绩

512*x^10 - 1280*x^8 + 1120*x^6 - 400*x^4 + 50*x^2 - 1 并得到Figure,图像如下: 实验二:编写程序实现[-1,1]上n阶勒让德多项式,并作画(n=0,1,…,10 在一个figure中)。要求:输入Legendre(-1,1,n),输出如a n x n+a n-1x n-1+…多项式。 在MATLAB的Editor中建立一个M-文件,输入程序代码,实现勒让德多项式的程序代码如下: function Pn=Legendre(n,x) syms x; if n==0 Pn=1; else if n==1 Pn=x; else Pn=expand((2*n-1)*x*Legendre(n-1)-(n-1)*Legendre(n-2))/(n); end x=[-1:0.1:1]; A=sym2poly(Pn); yn=polyval(A,x); plot (x,yn,'-o'); hold on

end 在command Windows中输入命令:Legendre(10),得出的结果为: Legendre(10) ans = (46189*x^10)/256 - (109395*x^8)/256 + (45045*x^6)/128 - (15015*x^4)/128 + (3465*x^2)/256 - 63/256 并得到Figure,图像如下: 实验三:利用切比雪夫零点做拉格朗日插值,并与以前拉格朗日插值结果比较。 在MATLAB的Editor中建立一个M-文件,输入程序代码,实现拉格朗日插值多项式的程序代码如下: function [C,D]=lagr1(X,Y) n=length(X); D=zeros(n,n); D(:,1)=Y'; for j=2:n for k=j:n D(k,j)=(D(k,j-1)- D(k-1,j-1))/(X(k)-X(k-j+1)); end end C=D(n,n); for k=(n-1):-1:1

插值法实验报告

实验二插值法 1、实验目的: 1、掌握直接利用拉格郎日插值多项式计算函数在已知点的函数值;观察拉格郎日插值的龙格现象。 2、了解Hermite插值法、三次样条插值法原理,结合计算公式,确定函数值。 2、实验要求: 1)认真分析题目的条件和要求,复习相关的理论知识,选择适当的解决方案和算法; 2)编写上机实验程序,作好上机前的准备工作; 3)上机调试程序,并试算各种方案,记录计算的结果(包括必要的中间结果); 4)分析和解释计算结果; 5)按照要求书写实验报告; 3、实验内容: 1) 用拉格郎日插值公式确定函数值;对函数f(x)进行拉格郎日插值,并对f(x)与插值多项式的曲线作比较。 已知函数表:(,)、(,)、(,)、(,)用三次拉格朗日插值多项式求x=时函数近似值。 2) 求满足插值条件的插值多项式及余项 1) 4、题目:插值法

5、原理: 拉格郎日插值原理: n次拉格朗日插值多项式为:L n (x)=y l (x)+y 1 l 1 (x)+y 2 l 2 (x)+…+y n l n (x) n=1时,称为线性插值, L 1(x)=y (x-x 1 )/(x -x 1 )+y 1 (x-x )/(x 1 -x )=y +(y 1 -x )(x-x )/(x 1 -x ) n=2时,称为二次插值或抛物线插值, L 2(x)=y (x-x 1 )(x-x 2 )/(x -x 1 )/(x -x 2 )+y 1 (x-x )(x-x 2 )/(x 1 -x )/(x 1 -x 2 )+y 2 (x -x 0)(x-x 1 )/(x 2 -x )/(x 2 -x 1 ) n=i时, Li= (X-X0)……(X-X i-1)(x-x i+1) ……(x-x n)(X-X0)……(X-X i-1)(x-x i+1) ……(x-x n) 6、设计思想: 拉格朗日插值法是根据 n + 1个点x 0, x 1 , (x) n (x < x 1 < (x) n )的函数值f (x ), f (x 1) , ... , f (x n )推出n次多項式p(x),然后n次多項式p (x)求出任意的 点x对应的函数值f (x)的算法。 7、对应程序: 1 ) 三次拉格朗日插值多项式求x=时函数近似值#include"" #define n 5 void main() { int i,j; float x[n],y[n]; float x1; float a=1;

matlab实现Lagrange多项式插值观察龙格现象

Matlab进行Lagrange多项式插值 拉格朗日插值法对函数y=1./(1+25*x.^2)在区间[-1,1]进行5次、10次、15次插值观察龙格现象 主程序 1.拉格朗日 function [c,l]=lagran(x,y) %c为多项式函数输出的系数 %l为矩阵的系数多项式 %x为横坐标上的坐标向量 %y为纵坐标上的坐标向量 w=length(x); n=w-1; l=zeros(w,w); for k=1:n+1 v=1; for j=1:n+1 if k~=j v=conv(v,poly(x(j)))/(x(k)-x(j)) %对多项式做卷积运算 end end l(k,:)=v; end c=y*l; 2.在matlab窗口中输入: x=linspace(-1,1,6);y=1./(1+25*x.^2); lagran(x,y) 回车可得结果: ans = -0.0000 1.2019 -0.0000 -1.7308 -0.0000 0.5673 在matlab窗口中输入: x=linspace(-1,1,11);y=1./(1+25*x.^2); lagran(x,y) 回车可得结果: ans = -220.9417 0.0000 494.9095 -0.0000 -381.4338 -0.0000 123.3597 0.0000 -16.8552 0.0000 1.0000 在matlab窗口中输入: x=linspace(-1,1,16);y=1./(1+25*x.^2); lagran(x,y) 回车可得结果: ans =

1.0e+003 * Columns 1 through 14 0.0000 -1.5189 -0.0000 4.6511 -0.0000 -5.5700 0.0000 3.3477 0.0000 -1.0830 -0.0000 0.1901 -0.0000 -0.0180 Columns 15 through 16 0.0000 0.0010 3.由以上结果可定义一下函数: function y=f1(x) y=1./(1+25*x.^2); function y=f2(x) y=1.2019*x.^4 -1.7308*x.^2+0.5673; function y=f3(x) y=-220.9417*x.^10+494.9095*x.^8-381.4338*x.^6+123.3597*x.^4-16.8552*x.^2+1; function y=f4(x) y=1*10^3*(-1.5189*x.^14+4.6511*x.^12-5.5700*x.^10+3.3477*x.^8-1.0830*x.^6+0.1901*x.^4-0.0180*x.^2+0.0010) 4. 在matlab窗口中输入: s1=@f1;s2=@f2;s3=@f3;s4=@f4;fplot(s1,[-1 1],'r');hold on;fplot(s2,[-1 1],'k');hold on;fplot(s3,[-1 1],'g');hold on;fplot(s4,[-1 1],'b');xlabel('input');ylabel('output');title('龙格现象');legend('s1=f(x)','s2=L5(x)','s3=L10(x)','s4=L15(X)');grid on 可以得到下图:

龙格现象实验报告1

数值分析实验报告 实验名称:观察龙格(Runge)现象实验 班级:12级信息与计算科学(1)班 姓名: 学号:33 16 17 59 实验日期: 2014.10.11 周次: 6 实验地点: A14-504

多种插值对比 function y=fun(x); y=5./(1+x.^2); end hours=-5:5; h=-5:0.1:5; temps=fun(hours); t1=interp1(hours,temps,h,'spline'); %(?±?óê?3?êy?Y??ê?oü?àμ?) t2=interp1(hours,temps,h, 'nearest'); t3=interp1(hours,temps,h, 'linear'); t4=interp1(hours,temps,h, 'cubic'); subplot(2,2,1); plot(hours,temps, ' bo',h,t1, 'r'); title('spline '); %×÷í? subplot(2,2,2); plot(hours,temps, 'bo',h,t2, 'r'); title(' nearest'); subplot(2,2,3); plot(hours,temps, 'bo',h,t3, 'r'); title('linear'); subplot(2,2,4); plot(hours,temps, 'bo',h,t4, 'r', h,t1, 'g'); title('cubic-spline'); -5 05 spline -5 05 nearest -5 05 linear -5 05 cubic-spline

数值分析拉格朗日插值法上机实验报告

课题一:拉格朗日插值法 1.实验目的 1.学习和掌握拉格朗日插值多项式。 2.运用拉格朗日插值多项式进行计算。 2.实验过程 作出插值点(1.00,0.00),(-1.00,-3.00),(2.00,4.00)二、算法步骤 已知:某些点的坐标以及点数。 输入:条件点数以及这些点的坐标。 输出:根据给定的点求出其对应的拉格朗日插值多项式的值。 3.程序流程: (1)输入已知点的个数; (2)分别输入已知点的X坐标; (3)分别输入已知点的Y坐标; 程序如下: #include #include #include float lagrange(float *x,float *y,float xx,int n) /*拉格朗日

插值算法*/ { int i,j; float *a,yy=0.0; /*a作为临时变量,记录拉格朗日插值多项*/ a=(float*)malloc(n*sizeof(float)); for(i=0;i<=n-1;i++) { a[i]=y[i]; for(j=0;j<=n-1;j++) if(j!=i) a[i]*=(xx-x[j])/(x[i]-x[j]); yy+=a[i]; } free(a); return yy; } int main() { int i; int n; float x[20],y[20],xx,yy; printf("Input n:");

scanf("%d",&n); if(n<=0) { printf("Error! The value of n must in (0,20)."); getch();return 1; } for(i=0;i<=n-1;i++) { printf("x[%d]:",i); scanf("%f",&x[i]); } printf("\n"); for(i=0;i<=n-1;i++) { printf("y[%d]:",i);scanf("%f",&y[i]); } printf("\n"); printf("Input xx:"); scanf("%f",&xx); yy=lagrange(x,y,xx,n); printf("x=%f,y=%f\n",xx,yy); getch(); } 举例如下:已知当x=1,-1,2时f(x)=0,-3,4,求f(1.5)的值。

龙格现象

二.主要方、步骤: 1.运用FORTRAN编制原函数,拉格朗日插值和线性插值程序; 2.将数据运用grapher将实验数据绘制成图. 三.程序代码: !龙格现象/高次插值的病态性质 PROGRAM LONGERend parameter(n=10) real(8) y(0:20),x(0:20),x1(0:20),y1(0:20),Ih(0:20) !计算f(x) open(2,file='y.doc') write(2,"('x',30x,'f(x)')") do i=0,n x(i)=-5.0+10*i/n y(i)=1.0/(1+x(i)**2) write(2,*) x(i), y(i) end do !计算Ln(x),拉格朗日插值程序 OPEN(2,file='y1.doc') write(2,"('x1',30x,'Ln(x)')") do i=0,n-1 x1(i)=(x(i)+x(i+1))/2 y1(i)=0.0 do j=0,n

!计算Wn+1(x),W'n+1(x) w=1.0 wp=1.0 do k=0,n w=w*(x1(i)-x(k)) if(k/=j) then wp=wp*(x(j)-x(k)) end if end do y1(i)=y1(i)+y(j)*w/wp/(x1(i)-x(j)) end do write(2,*) x1(i),y1(i) end do !分段线性插值程序 open(2,file='Ih.doc') write(2,"('x1',30x,'Ih')") do k=0,n-1 Ih(k)=(x1(k)-x(k+1))/(x(k)-x(k+1))*y(k)+(x1(k)-x(k))/(x(k+1)-x(k))*y( k+1) write(2,*) x1(k),Ih(k) end do print*,'数据已写入指定文件'

基于MATLAB数值分析实验报告

基于MATLAB数值分析实验报告 班级:072115 姓名:李凯 学号:20111003943

实验二:矩阵与向量运算 实验目的:在MATLAB里,会对矩阵与向量进行加、减、数乘、求逆及矩阵特征值运算,以及矩阵的LU分解。 设A是一个n×n方阵,X是一个n维向量,乘积Y=AX可以看作是n维空间变换。如果能够找到一个标量λ,使得存在一个非零向量X,满足:AX=λX (3.1)则可以认为线性变换T(X)=AX将X映射为λX,此时,称X 是对应于特征值λ的特征向量。改写式(3.1)可以得到线性方程组的标准形式:(A-λI)X=0 (3.2)式(3.2)表示矩阵(A-λI)和非零向量X的乘积是零向量,式(3.2)有非零解的充分必要条件是矩阵(A-λI)是奇异的,即:det(A-λI)=0 该行列式可以表示为如下形式: a11–λa12 (1) a21 a22 –λ…a2n =0 (3.3) ………… A n1 a n2 …a nn 将式(3.3)中的行列式展开后,可以得到一个n阶多项式,称为特征多项式: f(λ)=det(A-λI)=(-1)n(λn+c1λn-1+c2λn-2+…+c n-1λ+c n) (3.4) n阶多项式一共有n个根(可以有重根),将每个根λ带入式(3.2),可以得到一个非零解向量。

习题:求下列矩阵的特征多项式的系数和特征值λj: 3 -1 0 A= -1 2 -1 0-1 3 解:在MATLAB中输入命令: A=【3 -1 0;-1 2 -1;0 -1 3】; c=poly(A) roots(c) 得到:

实验四:Lagrange插值多项式 实验目的:理解Lagrange插值多项式的基本概念,熟悉Lagrange插值多项式的公式源代码,并能根据所给条件求出Lagrange插值多项式,理解龙格现象。 %功能:对一组数据做Lagrange插值 %调用格式:yi=Lagran_(x,y,xi) %x,y:数组形式的数据表 %xi:待计算y值的横坐标数组 %yi:用Lagrange还擦之算出y值数组 function fi=Lagran_(x,f,xi) fi=zeros(size(xi)); np1=length(f); for i=1:np1 z=ones(size(xi)); for j=i:np1 if i~=j,z=z.*(xi-x(j))/(x(i)-x(j));end end fi=fi+z*f(i); end return 习题:已知4对数据(1.6,3.3),(2.7,1.22),(3.9,5.61),(5.6,2.94)。写出这四个数据点的Lagrange插值公式,并

龙格现象matlab算法

课程名称:___计算方法____________指导老师:___程晓良________成绩:__________________ 实验名称:___观察龙格现象________________实验类型:________________同组学生姓名:__________ 一、实验目的和要求(必填)二、实验内容和原理(必填) 三、主要仪器设备(必填)四、操作方法和实验步骤 五、实验数据记录和处理六、实验结果与分析(必填) 七、讨论、心得 一、问题描述 在计算方法中,有利用多项式对某一函数的近似逼近,这样,利用多项式就可以计算相应的函数值。例如,在事先不知道某一函数的具体形式的情况下,只能测量得知某一些分散的函数值。例如我们不知道气温随日期变化的具体函数关系,但是我们可以测量一些孤立的日期的气温值,并假定此气温随日期变化的函数满足某一多项式。这样,利用已经测的数据,应用待定系数法便可以求得一个多项式函数f(x)。应用此函数就可以计算或者说预测其他日期的气温值。一般情况下,多项式的次数越多,需要的数据就越多,而预测也就越准确。 例外发生了:龙格在研究多项式插值的时候,发现有的情况下,并非取节点(日期数)越多多项式就越精确。著名的例子是f(x)=1/(1+25x^2).它的插值函数在两个端点处发生剧烈的波动,造成较大的误差。 二、相关公式 三、MATLAB程序 一、取等距节点,n=5,10,15,20 for n = 5:5:20 subplot(2,2,n/5) syms x;

f = 1/(1+25*x^2); x1=sym(zeros(n+1)); W=sym(ones(n+1)); L=sym(0); for i=0:n x1(i+1)=-1+2*i/n; end for i=0:n for j=0:n if j~=i w=(x-x1(j+1))/(x1(i+1)-x1(j+1)); W(i+1)=W(i+1)*w; end end L=L+W(i+1)*(1/(1+25*x1(i+1)^2)); end LL(n)=simplify(L); x=-1:0.01:1; y1=subs(f,x); y2=subs(L,x); plot(x,y1,'b');hold on; plot(x,y2,'r');hold off; title(['?-oˉêyf(x)=1/(1+25*x^2)ó?',num2str(n),'′?2??μoˉêy']); xlabel('x');ylabel('y'); legend('?-oˉêy','2??μoˉêy'); grid on end

拉格朗日插值龙格现象的matlab实现

拉格朗日插值龙格现象的MATLAB 实现 姓名:袁宽 学号:2 专业:电气工程 题目:对于函数2 11)(x x f +=,55≤≤-x 进行拉格朗日插值。10=n ,按等距节点求分段线性插值,把)(x f 和插值多项式的曲线画在同一张图上进行比较。观察Lagrange 插值及数值积分中的分段性插值。 f.m : function f= f( x ) f=1./(1+x.^2); end Lagrange.m function y=Lagrange(x0,y0,x); n=length(x0); m=length(x); for i=1:m z=x(i); s=0.0; for k=1:n p=1.0; for j=1:n if j~=k p=p*(z-x0(j))/(x0(k)-x0(j)); end end

s=p*y0(k)+s; end y(i)=s; End 拉格朗日插值的曲线: x=[-5:1:5]; y=1./(1+x.^2); x0=[-5:0.001:5]; y0=Lagrange(x,y,x0); y1=1./(1+x0.^2); plot(x0,y0,'b') hold on plot(x0,y1,'r') 使用龙格现象观察分段性插值的曲线:syms y x lx; y=1/(1+x^2); x0=-5:1:5; y0=zeros(1,length(x0)); for i=1:11 x=x0(i);

y0(i)=eval(y); end M = -5:0.01:5; y1 = zeros(1,length(M)); n = 1; for i=2:11 for x=-5:0.01:5 if x=x0(i-1) lx(1)=y0(i-1)*(x-x0(i))/(x0(i-1)-x0(i)); lx(2)=y0(i)*(x-x0(i-1))/(x0(i)-x0(i-1)); y1(n) = lx(1)+lx(2); n = n+1; end end end ezplot(y,[-5,5]) hold on A =-5:0.01:5; plot(A,y1,'r'); 分别运行两个文件后的得到两个图形曲线:

数值分析实验报告62338

数值分析实验报告 (第二章) 实验题目: 分别用二分法、牛顿迭代法、割线法、史蒂芬森迭代法求方程 的根,观察不同初始值下的收敛性,并给出结论。 问题分析: 题目有以下几点要求: 1.不同的迭代法计算根,并比较收敛性。 2.选定不同的初始值,比较收敛性。 实验原理: 各个迭代法简述 二分法:取有根区间的重点,确定新的有根区间的区间长度仅为区间长度的一版。对压缩了的有根区间重复以上过程,又得到新的有根区间,其区间长度为的一半,如此反复,……,可得一系列有 根区间,区间收敛到一个点即为根。 牛顿迭代法:不动点迭代法的一种特例,具有局部二次收敛的特性。迭代格式为 割线法:是牛顿法的改进,具有超线性收敛的特性,收敛阶为1.618. 迭代格式为 史蒂芬森迭代法:采用不动点迭代进行预估校正。至少是平方收敛的。迭代格式为

这里可采用牛顿迭代法的迭代函数。实验内容: 1.写出该问题的函数 代码如下: function py= f(x) syms k; y=(k^2+1)*(k-1)^5; yy=diff(y,k); py(1)=subs(y,k,x); py(2)=subs(yy,k,x); end 2.分别写出各个迭代法的迭代函数代码如下: 二分法: function y=dichotomie(a,b,e) i=2; m(1)=a; while abs(a-b)>e t=(a+b)/2; s1=f(a); s2=f(b); s3=f(t); if s1(1)*s3(1)<=0 b=t; else a=t; end m(i)=t; i=i+1; end y=[t,i+1,m]; end 牛顿迭代法: function y=NewtonIterative(x,e) i=2; en=2*e; m(1)=x; while abs(en)>=e s=f(x); t=x-s(1)/s(2); en=t-x; x=t; m(i)=t; i=i+1; end y=[x,i+1,m]; end 牛顿割线法:

拉格朗日插值、牛顿插值的matlab代码

实验五多项式插值逼近 信息与计算科学金融崔振威201002034031 一、实验目的: 拉格朗日插值和牛顿插值的数值实现 二、实验内容:p171.1、p178.1、龙格现象数值实现 三、实验要求: 1、根据所给题目构造相应的插值多项式, 2、编程实现两类插值多项式的计算 3、试分析多项式插值造成龙格现象的原因 主程序 1、拉格朗日 function [c,l]=lagran(x,y) %c为多项式函数输出的系数 %l为矩阵的系数多项式 %x为横坐标上的坐标向量 %y为纵坐标上的坐标向量 w=length(x); n=w-1; l=zeros(w,w); for k=1:n+1 v=1; for j=1:n+1 if k~=j v=conv(v,poly(x(j)))/(x(k)-x(j)) %对多项式做卷积运算end end l(k,:)=v; end c=y*l; 牛顿插值多项式主程序 function [p2,z]=newTon(x,y,t) %输入参数中x,y为元素个数相等的向量 %t为插入的定点 %p2为所求得的牛顿插值多项式 %z为利用多项式所得的t的函数值。 n=length(x); chaS(1)=y(1); for i=2:n x1=x;y1=y; x1(i+1:n)=[];

y1(i+1:n)=[]; n1=length(x1); s1=0; for j=1:n1 t1=1; for k=1:n1 if k==j %如果相等则跳出循环 continue; else t1=t1*(x1(j)-x1(k)); end end s1=s1+y1(j)/t1; end chaS(i)=s1; end b(1,:)=[zeros(1,n-1) chaS(1)]; cl=cell(1,n-1); %cell定义了一个矩阵 for i=2:n u1=1; for j=1:i-1 u1=conv(u1,[1 -x(j)]); %conv()用于多项式乘法、矩阵乘法 cl{i-1}=u1; end cl{i-1}=chaS(i)*cl{i-1}; b(i,:)=[zeros(1,n-i),cl{i-1}]; end p2=b(1,:); for j=2:n p2=p2+b(j,:); end if length(t)==1 rm=0; for i=1:n rm=rm+p2(i)*t^(n-i); end z=rm; else k1=length(t); rm=zeros(1,k1); for j=1:k1 for i=1:n rm(j)=rm(j)+p2(i)*t(j)^(n-i); end

高等数值分析拉格朗日插值多项式切比雪夫高斯龙格现象复合梯形辛普森求积公式

高等数值分析拉格朗日插值多项式切比雪夫高斯龙格现象复合梯形辛普森求积公式 解答: 1.拉格朗日插值函数: function y=lagrange (a,b,x) y=0; if length(a)==length(b) n=length(a); else disp('ERROR!length(a)!=length(b)') return; end for i=1:n k=1; for j=1:n if j~=i k=k.*(x-a(j))/(a(i)-a(j)); end end y=y+k*b(i); end

2.问题(a): function Q_a m=100; n=10; x=-1:2/n:1; y=1./(1+9*x.^2); x0=-1:2/m:1; y0=lagrange(x,y,x0); y1=1./(1+9*x0.^2); plot(x0,y0,'--r'); hold on; plot(x0,y1,'-b'); end 3.问题(b): function Q_b m=100; n=10; x=zeros(1,n+1); for i=1:n+1 x(i)=cos((2*i-1)*pi/(2*n+2)); end y=1./(1+9*x.^2); x0=-1:2/m:1; y0=lagrange(x,y,x0); y1=1./(1+9*x0.^2); plot(x0,y0,'--r'); hold on; plot(x0,y1,'-b'); end 4.问题(c): main.m(m文件) figure(1) Q_a() figure(2) Q_b() syms x y=1/(1+9*x^2); I0=int(y,-1,1);%准确值 n=10;

龙格现象实验

关于龙格现象的实验报告 1. 实验目的: 观察拉格朗日插值的龙格(Runge)现象.。 2. 实验内容: 对于函数211)(x x f +=进行拉格朗日插值,取不同的节点数n ,在区间[-5,5]上取等距间隔的节点为插值点,把f (x )和插值多项式的曲线画在同一张图上进行比较。 具体步骤如下: 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 值不同时,间距间隔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)和取不同节点数的插值多项式的曲线画在同一张图上进行比较。 3.实验结果: (1)取n=4,

Lagrange插值程序1

在Matlab中,可以编写如下程序来利用Lagrange插值公式进行计算: function f=Lagrange(x,fx,inx) n=length(x);m=length(inx); for i=1:m; z=inx(i); s=0.0; for k=1:n p=1.0; for j=1:n if j~=k p=p*(z-x(j))/(x(k)-x(j)); end end s=p*fx(k)+s; end f(i)=s; end plot(x,fx,'O',inx,f) x=[1:12] fx=[12 234 34 -1 34 2 5 23 34 9 45 23] xi=[1:0.2:12] Lagrange(x,fx,xi) 得出结果: 12.0000 -60.5937 18.2765 124.9778 202.5952 234.0000 223.3757 184.1249 131.4738 78.4253 34.0000 2.9467 -13.6885 -17.5810 -12.0379 -1.0000 11.7556 23.1624 31.1611 34.7730 34.0000 29.6054 22.8332 15.1153 7.8099 2.0000 -1.6307 -2.8397 -1.7907 1.0404 5.0000 9.4024 13.6643 17.4033 20.4834 23.0000 25.2037 27.3769 29.6858 32.0400 34.0000 34.7742 33.3426 28.7320 20.4439 9.0000 -3.4848 -12.8605 -12.8873 4.0592 4 5.0000 112.3788 197.1817 267.9699 254.3439 23.0000

龙格现象

3. 多项式插值的龙格现象 考虑在一个固定的区间上用插值逼近一个函数。显然,拉格朗日插值中使用的节点越多,插值多项式的次数就越高,自然关心插值多项式的次数增加时,()n L x 是否也更加靠近被逼近的函数。龙格给出的一个例子是极著名并富有启发性的。设在区间[]1,1-上的函数为: ()21125f x x = +,考虑区间[]1,1-的一个等距划分,分点为:21,0,1,2,,i i x i n n =-+=则拉格朗日插值多项式为: ()()201 125n n i i i L 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 on n=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:n w = ones(size(u)); for j = [1:k-1 k+1:n] w = (u-x(j))./(x(k)-x(j)).*w; end v = v + w*y(k); end plot(x,y,'o',u,v,'--') hold off

拉格朗日龙格现象

实 验 报 告 一.实验名称:拉格朗日插值的龙格现象 二.实验目的: 理解高阶插值的病态性,观察拉格朗日插值的龙格现象。 三.实验内容: 在区间[-5,5]上取节点数n=11,等距离h=1的节点为插值点,对于函数25()1f x x =+ 进行拉格朗日插值,把f(x)与插值多项式的曲线花在同一张图上。 四. 实验基础知识及原理: 1)拉格朗日插值函数定义: 对某个多项式函数,已知有给定的k + 1个取值点: 其中对应著自变数的位置,而对应著函数在这个位置的取值。 假设任意两个不同的x j 都互不相同,那麼应用拉格朗日插值公式所得到的拉格朗日插值多项式为: 其中每个为拉格朗日基本多项式(或称插值基函数),其表达式为: [3] 拉格朗日基本多项式的特点是在 上取值为1,在其它的点 上取值 为0。 2)龙格现象: 在计算方法中,有利用多项式对某一函数的近似逼近,这样,利用多项式就可以计算相应的函数值。一般情况下,多项式的次数越多,需要的数据就越多,而预测也就越准确。但是在有的情况下,并非取节点(日期数)越多多项式就越精确。 3)matlab: MATLAB 是矩阵实验室(Matrix Laboratory )的简称,是美国MathWorks 公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB 和Simulink 两大部分。该实验中可利用matlab 的绘图功能将拉格朗日函数跟原函数显示出来,通过对比得出实验结论。

五. 具体实验过程 1. 用matlab的editor将老师提供的拉格朗日插值的调用函数编辑为一个m文件 lagrange.m 2.在脚本窗口中输入以下命令: 执行上面的命令可以得到输出的曲线如下:

中国矿业大学计算方法实验四:龙格现象

专业 机械工程 序号03150951 姓名 杨闰清 日期 5.01 实验四 龙格现象的发生、防止和插值效果的比较 【实验目的】 1.学会使用计算机观察拉格朗日插值的龙格现象 2.通过学习和使用计算机利用线性插值防止龙格现象的发生 【实验内容】 4 5(0,1...,),10/,50.25(0,1,...40) 1 2 y=arctgx 1 I n=10,20II n=10,20i k x ih i n h n x h k x y x =-+===-+== +对下列函数分别按给定方案进行插值,计算在其点上的值,并绘出插值函数的图形。 ();()方案分别取作拉格朗日插对区间[-5,5]作值 方等距划案分别取分:作分段线性日插值 【程序如下】: 拉格朗日插值函数程序: function yp=mlagr(x,y,xp) n=length(x); m=length(xp); yp=zeros(1,m);c1=ones(n-1,1);c2=ones(1,m); for i=1:n xb=x([1:i-1,i+1:n]); yp=yp+y(i)*prod((c1*xp-xb'*c2)./(x(i)-xb'*c2)); end 分段插值函数程序: function yy=mpiece(x,y,xx) n=length(x); for j=1:length(xx) for i=2:n if xx(j)<=x(i) yy(j)=y(i-1)*(xx(j)-x(i))/(x(i-1)-x(i))+y(i)*(xx(j)-x(i-1))/(x(i)-x(i-1)); break; end end end 【运行结果如下】: 方案I : 41 1x y x = +(); 调用程序如下: x0=[-5:0.01:5];

相关文档
最新文档