Matlab解决简单4次牛顿差值,Matlab插值法

2024-01-20 08:50

本文主要是介绍Matlab解决简单4次牛顿差值,Matlab插值法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

实验目的:

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

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

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

实验要求:

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

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

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

实验内容:

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

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

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

6e9099745cfccb09a1a3889324c62139.png

实验步骤:

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

86c8a42ca64bad91a1c400c1b57eb1a8.png的系数构成向量为:

c45d9312077b99a79754aa708205b5b1.png

。示例如下:

6eddeba9b5d109e673c831ea5c39d452.png

975343320c5c41233fea5031be35179d.png

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

a4daddcd3b6d45a7277dac622c4c3f0a.png

例子

14ef03aff51e0a0efd0123a3bf02fae1.png运行示例:

7c6de35202102a86dfc7aab1bf1f6e2b.png

多项式的加法:

c9cef752c8185abe53ce0f8172014009.png

结果是

39e8aeabb3a521c38ce8b3890e467356.png

多项式乘法:

3ff259500f530864ed21ae9961f57cbc.png

结果是

12ce1984af18b464200de8223f48096e.png

多项式除法:

ac6db9cc1449c6892b99f5384988f7a0.png

多项式导数:

fc0f919ff60db7303f61def003558af8.png

792078cf10aa7e64d2ed5c7f321b9554.png

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

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

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

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

3 if m~=n

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

5 end

6 s=0;

7 for k=1:n

8 t=ones(1,p);

9 for j=1:n

10 if j~=k

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

12 end

13 end

14 s=s+t.*y(k);

15 end

16 yi=s;

17 end

Lagrange

运行示例:

137fd1fe9b69ca96c9ac7d241820764b.png

555ce07c3548250d1fb26f63b131afda.png

9da96c1cf8c35c6722737acb8c11353a.png

7186dc9c37f41cf1eb1159b2cc103590.png

d6c37ac02b4f61946c0129dc77b3917d.png

96998979cfae27eca4b9e7a0a65718e3.png

牛顿插值法代码:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

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

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 %根据差商表,求对应的牛顿插值多项式在x=xi处的值yi

14 N(1)=A(1,1);

15 for j=2:n

16 T=1;

17 for i=1:j-1

18 T=T*(xi-x(i));

19 end

20 N(j)=A(1,j)*T;

21 end

22 yi=sum(N); %将x=xi带入牛顿插值多项式,得到的yi的值

23 %A 输出差商表

24 end

newtonint

运行实例:

9d80017996ddb9105b9e9ec2b01ad8af.png

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

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

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 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

运行实例:

67080b8f7619b9ac57dbc60945ca64cc.png

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

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

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

运行示例:

23fa2a2bd8079cef745d74864b69afbd.png

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

20e245e5dafded156026ef61f80f86a9.png

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

970f774fd93c110f0be458ddcc8efee0.png

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

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

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

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

0cc04309e8641f79f66f89ff6e6687d6.png

并作出图像:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

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

7d4e8894f6b4d9826e6037179865d9a1.png

小结:

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

613b79bdde290c5a597bb476502f58ed.png

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

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

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

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

这篇关于Matlab解决简单4次牛顿差值,Matlab插值法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/625459

相关文章

一份LLM资源清单围观技术大佬的日常;手把手教你在美国搭建「百万卡」AI数据中心;为啥大模型做不好简单的数学计算? | ShowMeAI日报

👀日报&周刊合集 | 🎡ShowMeAI官网 | 🧡 点赞关注评论拜托啦! 1. 为啥大模型做不好简单的数学计算?从大模型高考数学成绩不及格说起 司南评测体系 OpenCompass 选取 7 个大模型 (6 个开源模型+ GPT-4o),组织参与了 2024 年高考「新课标I卷」的语文、数学、英语考试,然后由经验丰富的判卷老师评判得分。 结果如上图所

2024.6.24 IDEA中文乱码问题(服务器 控制台 TOMcat)实测已解决

1.问题产生原因: 1.文件编码不一致:如果文件的编码方式与IDEA设置的编码方式不一致,就会产生乱码。确保文件和IDEA使用相同的编码,通常是UTF-8。2.IDEA设置问题:检查IDEA的全局编码设置和项目编码设置是否正确。3.终端或控制台编码问题:如果你在终端或控制台看到乱码,可能是终端的编码设置问题。确保终端使用的是支持你的文件的编码方式。 2.解决方案: 1.File -> S

时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测

时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测 目录 时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测基本介绍程序设计参考资料 基本介绍 MATLAB实现LSTM时间序列未来多步预测-递归预测。LSTM是一种含有LSTM区块(blocks)或其他的一种类神经网络,文献或其他资料中LSTM区块可能被描述成智能网络单元,因为

回调的简单理解

之前一直不太明白回调的用法,现在简单的理解下 就按这张slidingmenu来说,主界面为Activity界面,而旁边的菜单为fragment界面。1.现在通过主界面的slidingmenu按钮来点开旁边的菜单功能并且选中”区县“选项(到这里就可以理解为A类调用B类里面的c方法)。2.通过触发“区县”的选项使得主界面跳转到“区县”相关的新闻列表界面中(到这里就可以理解为B类调用A类中的d方法

自制的浏览器主页,可以是最简单的桌面应用,可以把它当成备忘录桌面应用

自制的浏览器主页,可以是最简单的桌面应用,可以把它当成备忘录桌面应用。如果你看不懂,请留言。 完整代码: <!DOCTYPE html><html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><ti

vue同页面多路由懒加载-及可能存在问题的解决方式

先上图,再解释 图一是多路由页面,图二是路由文件。从图一可以看出每个router-view对应的name都不一样。从图二可以看出层路由对应的组件加载方式要跟图一中的name相对应,并且图二的路由层在跟图一对应的页面中要加上components层,多一个s结尾,里面的的方法名就是图一路由的name值,里面还可以照样用懒加载的方式。 页面上其他的路由在路由文件中也跟图二是一样的写法。 附送可能存在

vue+elementui分页输入框回车与页面中@keyup.enter事件冲突解决

解决这个问题的思路只要判断事件源是哪个就好。el分页的回车触发事件是在按下时,抬起并不会再触发。而keyup.enter事件是在抬起时触发。 so,找不到分页的回车事件那就拿keyup.enter事件搞事情。只要判断这个抬起事件的$event中的锚点样式判断不等于分页特有的样式就可以了 @keyup.enter="allKeyup($event)" //页面上的//js中allKeyup(e

vue+elementui--$message提示框被dialog遮罩层挡住问题解决

最近碰到一个先执行this.$message提示内容,然后接着弹出dialog带遮罩层弹框。那么问题来了,message提示框会默认被dialog遮罩层挡住,现在就是要解决这个问题。 由于都是弹框,问题肯定是出在z-index比重问题。由于用$message方式是写在js中而不是写在html中所以不是很好直接去改样式。 不过好在message组件中提供了customClass 属性,我们可以利用

python实现最简单循环神经网络(RNNs)

Recurrent Neural Networks(RNNs) 的模型: 上图中红色部分是输入向量。文本、单词、数据都是输入,在网络里都以向量的形式进行表示。 绿色部分是隐藏向量。是加工处理过程。 蓝色部分是输出向量。 python代码表示如下: rnn = RNN()y = rnn.step(x) # x为输入向量,y为输出向量 RNNs神经网络由神经元组成, python

Pycharm配置conda环境(解决新版本无法识别可执行文件问题)

引言: 很多小伙伴在下载最新版本的pycharm或者更新到最新版本后为项目配置conda环境的时候,发现文件夹目录中无法显示可执行文件(一般为python.exe),以下就是本人遇到该问题后试验和解决该问题的一些方法和思路。 一般遇到该问题的人群有两种,一种是刚入门对pycharm进行conda环境配置的小白(例如我),不熟悉相关环境配置的操作和过程,还有一种是入坑pycharm有段时间的老手