求lagrange插值多项式的matlab编程

求lagrange插值多项式的matlab编程,第1张

function y=lagrange(x0,y0,x);

% x0自变量取值向量已知 y0为已知对应x0的函数取值,x为要求插值点坐标

n=length(x0);

m=length(x);

for i=1:m

z=x(i);

s=00;

for k=1:n

p=10;

for j=1:n

if j~=k

p=p(z-x0(j))/(x0(k)-x0(j)); %插值基函数

end

end

s=py0(k)+s; %lagrange插值多项式

end

y(i)=s;

end

例程:

x0=[0:2]

y0=[2 3 5]

x=[0:001:2]

Lagrange(x0,y0,x)

function yy=lagrange(x1,y1,xx)

%本程序为Lagrange1插值,其中x1,y1

%为插值节点和节点上的函数值,输出为插值点xx的函数值,

%xx可以是向量。

syms x

n=length(x1);

for i=1:n

t=x1;t(i)=[];L(i)=prod((x-t)/(x1(i)-t));% L向量用来存放插值基函数

end

u=sum(Ly1);

p=simplify(u) % p是简化后的Lagrange插值函数(字符串)

yy=subs(p,x,xx);

clf

plot(x1,y1,'ro',xx,yy,'')

你需要把上面的部分保存为Lagrangenew。m文件。

文件头应加  function s=Lagrangenew(x,y,x0)

后面是

nx=length(x);

ny=length(y);

。。。。。。

然后,可以命令窗口执行下面部分的命令

结果如下

matlab不同次数的拉格朗日插值(y=1/(1+25x^2))图像怎么放在一个坐标系中?这个问题可以这样处理,plot()函数后面,加一个hold on 命令。

那怎样来实现,可以用下列代码来完成:

1、首先确定x的区间,如 x在-1,1,取x=[-1:01:1]向量数据

2、利用拉格朗日插值公式,进行插值计算,即

w_x_diff(j)=subs(w_x_diff(n+1),x_para,x(j));

ln_x(j)=(1/(1+x(j)^2))w_x(n+1) / ((x_para-x(j))(w_x_diff(j)));

3、利用循环语句,计算n=5,10,20次的插值

for n=[5,10,20]

。。。

w_x(n+1)=prod(part_x);

w_x_diff(n+1)=diff(w_x(n+1));

。。。

Ln_x=sum(ln_x);

x_vector=-099:0037:099;

Ln_x=subs(Ln_x,x_para,x_vector);

。。。

end

4、利用plot函数,绘制各次数的插值多项式的曲线图

plot(x0,y),hold on

plot(x_vector,Ln_x),hold on

5、完善代码,并运行得到n=5,10,20次插值多项式的曲线图

6、从图像中,可以观察到,采用拉格朗日多项式插值时,随着插值次数越来越大,插值多项式不见得次数越高越准确(Runge现象),Ln(x)并不一定收敛于f(x),而出现多阶震荡曲线在指定区间中徘徊。

以上就是关于求lagrange插值多项式的matlab编程全部的内容,包括:求lagrange插值多项式的matlab编程、matlab中,已知原函数和插值点,怎么求三次拉格朗日插值多项式、matlab求拉格朗日插值多项式并画图等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9287035.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存