首页 > 编程知识 正文

matlab牛顿插值公式,4次牛顿插值matlab例题

时间:2023-05-06 15:37:22 阅读:114586 作者:4769

实验目的:

1 .多项式在1.Matlab中的表示及多项式运算

用Matlab实现拉格朗日及tmdgb插值法

3 .用多项式插值法拟合数据

实验要求:

1 .掌握多项式的表达和运算

2 .拉格朗日插值法的实现(见吕同富版教材) ) )。

3.tmdgb插值法的实现(见吕同富版教材) ) ) ) ) ) )。

实验内容:

1 .多项式公式及建立: 多项式的四则运算、导数、积分。

用Matlab实现拉格朗日及tmdgb插值法。

3 .用多项式插值法拟合数据。

实验步骤:

1 .多项式表达式。 在MATLAB中,用向量表示多项式,将多项式的系数按照乘方顺序保存在向量中。 多项式p(x )的具体表示方法:

的系数构成向量如下。 以下是示例。

以字符串形式输出向量表示多项式的常规函数示例:

范例

执行示例:

多项式加法:

结果呢

多项式乘法:

结果呢

多项式除法:

多项式导数:

用Matlab实现拉格朗日、拉格朗日码:

1函数yi=la grange (x,y,xi ) )。

2m=Length(x; n=长度(y; p=长度(Xi;

3ifm(=n

4错误('向量x和y的长度必须一致) );

5结束

6 s=0;

7 for k=1:n

8t=ones(1,p );

9 for j=1:n

10 if j~=k

11t=t.*(Xi-x(j ) )./(x ) k )-x ) j );

12结束

13结束

14s=st.*y(k;

15结束

16 yi=s;

17结束

拉格兰古

执行示例:

tmdgb插值代码:

1函数yi=Newton int (x,y,xi ) )。

2m=Length(x; n=长度(y;

3ifm(=n

4错误('向量x和y的长度必须一致) );

5结束

6a=Zeros(n;

7a (3360,1 )=y;

8 for j=2:n%j是列标

9forI=1:(n-j1 ) %i是行标

10a(I,j )=(a ) I1,j-1 )-a ) I,j-1 ) )/(x ) I ) ) ); %计算差商表

11结束

12结束

由13 %差商表求出对应的tmdgb插值多项式在x=xi时的值yi

14n(1)=a ) 1,1 );

15 for j=2:n

16 T=1;

17 for i=1:j-1

18t=t*(Xi-x ) I );

19结束

20n(j )=a(1,j ) *T;

21结束

2yi=sum(n ); 将x=xi带入tmdgb插值多项式得到的yi的值

23 %A输出差商表

24结束

newtonint

执行示例:

等音调节点的tmdgb后方插补码:

1 function yi=new

tonint1(x,y,xi)

2 h=x(2)-x(1);t=(xi-x(1))/h;

3 n=length(y);Y=zeros(n);Y(:,1)=y';

4 for k=1:n-1

5 Y(:,k+1)=[diff(y',k);zeros(k,1)];

6 end

7 yi=Y(1,1);

8 for i=1:n-1

9 z=t;

10 for k=1:i-1

11 z=z*(t-k);

12 end

13 yi=yi+Y(1,i+1)*z/prod([1:i]);

14 end

newtonint1

运行实例:

等距节点的tmdgb向前插值代码:

1 function yi=newtonint2(x,y,xi)

2 n=length(x);h=x(n)-x(n-1);t=(x(n)-xi)/h;

3 n=length(y);Y=zeros(n);Y(:,1)=y';

4 for k=1:n-1

5 Y(:,k+1)=[zeros(k,1);diff(y',k)];

6 end

7 h=x(n)-x(n-1);t=(x(n)-xi)/h;yi=Y(n,1);

8 for i=1:n-1

9 z=t;

10 for k=1:i-1

11 z=z*(t-k);

12 end

13 yi=yi+Y(n,i+1)*(-1)^i*z/prod([1:i]);

14 end

newtonint2

运行示例:

3.使用4次tmdgb插值多项式插值,并作图:

解:由4次tmdgb插值多项式,

求上述多项式的系数:(修改newtonint.m代码,得到差商表),代码如下:

1 function B=newtonint4(x,y)

2 m=length(x);n=length(y);

3 if m~=n

4 error('向量x与y的长度必须一致');

5 end

6 A=zeros(n);

7 A(:,1)=y;

8 for j=2:n%j为列标

9 for i=1:(n-j+1) %i为行标

10 A(i,j)=(A(i+1,j-1)-A(i,j-1))/(x(i+j-1)-x(i));%计算差商表

11 end

12 end

13 B=A;

14 end

newtonint4

代入数据得到差商表:

0.98

-0.3

-0.625

-0.2083

-0.5208

0.92

-0.55

-0.75

-0.625

0

0.81

-0.85

-1.125

0

0

0.64

-1.3

0

0

0

0.38

0

0

0

0

已知,第一行的便是插值多项式的系数,代入插值多项式:

并作出图像:

1 x0=[0.2 0.4 0.6 0.8 1.0];

2 y0=[0.98 0.92 0.81 0.64 0.38];

3 plot(x0,y0,'b-o')

4 hold on

5 k=0:1:10;

6 x=0.2+0.08*k;

7 for i=1:1:11

8 y(i)=0.98-0.3*(x(i)-0.2)-0.625*(x(i)-0.2)*(x(i)-0.4)-0.2083333*(x(i)-0.2)*(x(i)-0.4)*(x(i)-0.6)-0.520833333*(x(i)-0.2)*(x(i)-0.4)*(x(i)-0.6)*(x(i)-0.8);

9 end

10 plot(x,y,'r-o');

11 legend('原图像','4次插值图像');

plot3

小结:

在编写tmdgb插值的代码时,我遇到了超出元组索引的问题。我在MATLAB的提示下(它的提示是英语),如图:

这个f是使用迭代来求差商的,但是出现了问题。我根据它的提示创建了一个全零数组用于存储运算得到的差商,在某种程度上解决了这个问题。

在解决第3题时,我特意编写了一个算差商的程序和一个4次tmdgb插值多项式代入数据画图的程序。差商的程序是修改第2题的tmdgb插值程序得到的,这在一定程度上说明,一个程序的功能是可以分开的同时也可以写在一起的。但在写4次多项式代入画图的程序时,并没有参考的我,只能回看书本关于4次tmdgb插值的知识,我得到了这个tmdgb插值多项式的公式,并发现它的关键就是每一项的系数,而那些系数就是算得的差商,所以,很快,我就写出了4次多项式代入画图的程序。很开心的是,算得的多项式拟合得很好。

标签:yi,xi,end,插值法,多项式,tmdgb,插值,Matlab

来源: https://www.cnblogs.com/jianle23/p/12817734.html

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。