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求拉格朗日插值多项式并画图等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)