matlab用插值法plot,Matlab插值法

matlab用插值法plot,Matlab插值法实验目的:1.Matlab中多项式的表示及多项式运算2.用Matlab实现拉格朗日及牛顿插值法3.用多项式插值法拟合数据实验要求:1.掌握多项式的表示和运算2.拉格朗日插值法的实现(参见吕同富版教材)3.牛顿插值法的实现(参见吕同富版教材)实验内容:1.多项式的表达式和创建;多项式的四则运算、导数与积分。2.用Matlab实现拉格朗日及牛顿插值法。3.用多项式插值法拟合数据。实验步骤:1.多项式的…

大家好,又见面了,我是你们的朋友全栈君。

实验目的:

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

2.用Matlab实现拉格朗日及牛顿插值法

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

实验要求:

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

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

3.牛顿插值法的实现(参见吕同富版教材)

实验内容:

1.多项式的表达式和创建;多项式的四则运算、导数与积分。

2.用Matlab实现拉格朗日及牛顿插值法。

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

20200502141428639371.png

实验步骤:

1.多项式的表达式,MATLAB中使用以为向量来表示多项式,将多项式的系数按照降幂次序存放在向量中。多项式P(x)的具体表示方法:

20200502141429075867.png的系数构成向量为:

20200502141429407877.png

。示例如下:

20200502141429697897.png

20200502141429791641.png

将向量表示的多项式用字符串输出的通用函数示例:

20200502141429968388.png

例子

20200502141430322857.png运行示例:

20200502141430528899.png

多项式的加法:

20200502141430607019.png

结果是

20200502141430918522.png

多项式乘法:

20200502141431161671.png

结果是

20200502141431442903.png

多项式除法:

20200502141431679216.png

多项式导数:

20200502141431979978.png

20200502141432059074.png

2.用Matlab实现拉格朗日,拉格朗日代码:

2b65ef29a5872cc0e4771c25889edd04.gif

6a087676c59fa8b19d76e6bb55a32902.gif

1 function yi=Lagrange(x,y,xi)2 m=length(x);n=length(y);p=length(xi);3 if m~=n4 error(‘向量x与y的长度必须一致‘);5 end6 s=0;7 for k=1:n8 t=ones(1,p);9 for j=1:n10 if j~=k11 t=t.*(xi-x(j))./(x(k)-x(j));12 end13 end14 s=s+t.*y(k);15 end16 yi=s;17 end

Lagrange

运行示例:

20200502141432323706.png

20200502141432570760.png

20200502141432771919.png

20200502141433325595.png

20200502141433776738.png

20200502141433971061.png

牛顿插值法代码:

2b65ef29a5872cc0e4771c25889edd04.gif

6a087676c59fa8b19d76e6bb55a32902.gif

1 function yi=newtonint(x,y,xi)2 m=length(x);n=length(y);3 if m~=n4 error(‘向量x与y的长度必须一致‘);5 end6 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 end12 end13 %根据差商表,求对应的牛顿插值多项式在x=xi处的值yi14 N(1)=A(1,1);15 for j=2:n16 T=1;17 for i=1:j-1

18 T=T*(xi-x(i));19 end20 N(j)=A(1,j)*T;21 end22 yi=sum(N); %将x=xi带入牛顿插值多项式,得到的yi的值23 %A 输出差商表24 end

newtonint

运行实例:

20200502141434044299.png

等距节点的牛顿向后插值代码:

2b65ef29a5872cc0e4771c25889edd04.gif

6a087676c59fa8b19d76e6bb55a32902.gif

1 function yi=newtonint1(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 end7 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 end13 yi=yi+Y(1,i+1)*z/prod([1:i]);14 end

newtonint1

运行实例:

20200502141434216163.png

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

2b65ef29a5872cc0e4771c25889edd04.gif

6a087676c59fa8b19d76e6bb55a32902.gif

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 end7 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 end13 yi=yi+Y(n,i+1)*(-1)^i*z/prod([1:i]);14 end

newtonint2

运行示例:

20200502141434399745.png

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

20200502141434643870.png

解:由4次牛顿插值多项式,

20200502141434825499.png

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

2b65ef29a5872cc0e4771c25889edd04.gif

6a087676c59fa8b19d76e6bb55a32902.gif

1 function B=newtonint4(x,y)2 m=length(x);n=length(y);3 if m~=n4 error(‘向量x与y的长度必须一致‘);5 end6 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 end12 end13 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

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

20200502141434951467.png

并作出图像:

2b65ef29a5872cc0e4771c25889edd04.gif

6a087676c59fa8b19d76e6bb55a32902.gif

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 on5 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 end10 plot(x,y,‘r-o‘);11 legend(‘原图像‘,‘4次插值图像‘);

plot3

20200502141435539320.png

小结:

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

20200502141435707278.png

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

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

原文:https://www.cnblogs.com/jianle23/p/12817734.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/136119.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Python Flask中的jsonify

    Python Flask中的jsonify#-*-coding:utf-8-*-#@Time:2022/4/1311:46下午#@Author:renwoxing#@File:flask_restful_demo.py#@Software:PyCharmfromflaskimportFlask,jsonify,abort,requestapp=Flask(__name__)books=[{‘id’:1,’name’.

    2022年5月23日
    29
  • [算法]-最短路径算法总结「建议收藏」

    [算法]-最短路径算法总结「建议收藏」Dijkstra最短路径算法按路径长度的递增次序,逐步产生最短路径的贪心算法基本思想:首先求出长度最短的一条最短路径,再参照它求出长度次短的一条最短路径,依次类推,直到从顶点v到其它各顶点的最短路径全部求出为止。时间复杂度为O(n2)算法流程:首先选定源点1,建立邻接矩阵C[5][5],初始化三个数组分别为D[n],P[n],S[n],分别用来存储从源点到对应点的最短距离和最短路…

    2022年5月26日
    37
  • matlab单相电源在哪里,浅谈基于MATLAB的单相独立光伏逆变电源电路仿真设计

    matlab单相电源在哪里,浅谈基于MATLAB的单相独立光伏逆变电源电路仿真设计156电子技术  独立型光伏发电系统系统结构如图1所示,主要有太阳电池组件(方阵)、控制器、储能蓄电池(组)、直流/交流逆变器等部分组成。光伏阵列发出的直流电通过器将其逆变为交流电供给负载,蓄电池将光伏阵列在白天发出的电能存储起来,并在夜间和阴雨天给负载供电。浅谈基于MATLAB的单相独立光伏逆变电源电路仿真设计魏显文(武威职业学院,甘肃武威733000)摘 要:本文…

    2022年5月11日
    32
  • fiddler抓包模拟器教程_wpe手机模拟器抓包

    fiddler抓包模拟器教程_wpe手机模拟器抓包1.打开,Fiddler.点击tools设置,把HPPPS证书保存在桌面,拖动到安卓模拟器里面.重启Fiddler2.长按网络,修改主机名和端口.在设置[安全]里,添加证书.转载于:https://www.cnblogs.com/limi2019/articles/11411904.html…

    2022年10月2日
    0
  • 一步设置Intellij IDEA 热部署处理方法

    一步设置Intellij IDEA 热部署处理方法  在IntellijIDEA中默认是关闭了自动编译的,可以按照如下1步设置开启自动编译:1.IDEA开启项目自动编译,进入设置,Build,Execut,Deployment->Compiler勾选中左侧的BuildProjectautomatically   …

    2022年6月1日
    77
  • EXCEL 出错 8000401a

    EXCEL 出错 8000401a检索COM类工厂中CLSID为{00024500-0000-0000-C000-000000000046}的组件时失败,原因是出现以下错误:8000401a先用骨哥狗了一会,没解决方案,又用摆渡,也没找到方法,最后还是看微软的帮助解决了问题:1.打开DCOM配置,取消交互式用户,使用启动用户2.安全中附足够权限,不知道用户是谁就写Everyonehttp://suppo…

    2022年7月25日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号