出错原因:
函数定义只有一个输出参数,而调用时要求返回两个参数,当然就出错了。
修改:
1、把函数最前面的
function f=language(x,y,x0)改成
function [f,f0]=language (x,y,x0)
2、另外,最后两句也存在问题:
f0=subs(f,'t',x0);应为
f0=subs(f,t,x0);而最后一句则不需要,直接删掉即可。
改后调用实例:
>> [f,f0]=language(x,y,16)f =
-799/3125t(t-1)(t-3/2)(t-2)(t-5/2)(t-3)+561/500t(t-1/2)(t-3/2)(t-2)(t-5/2)(t-3)-133/75t(t-1/2)(t-1)(t-2)(t-5/2)(t-3)+3031/2500t(t-1/2)(t-1)(t-3/2)(t-5/2)(t-3)-399/1250t(t-1/2)(t-1)(t-3/2)(t-2)(t-3)+1411/112500t(t-1/2)(t-1)(t-3/2)(t-2)(t-5/2)
f0 =
099957318144
附件中是拉格朗日插值法程序。
以下面数据为例:(运行时,也就是调用Languagem程序)
x = [-215 -100 001 102 203 325];
y = [1703 724 105 203 1706 2305 ];
x0 = 06;
y0=Language(x,y,x0)
(上面语句,在command window中输入即可)
结果:
y0=
00201
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,'')
解决龙格现象
1
避免龙格现象的方法
为避免出现龙格现象,我们对拉格朗日插值基函数的插值节点做一个调整。采用切比雪夫零点插值。这样就可以避免出现龙格现象。
2
编制切比雪夫零点的拉格朗日插值函数
本次编程,只需在上面的程序做局部修改,将等距节点替换为切比雪夫零点作为插值节点。其他基本不变。
3
运行修改后程序
在运行修改后的程序之前记得要先保存哦!
运行方法和上面讲的一样,本次就选用快捷方法,即直接按绿色箭头。
4
运行结果:没出现龙格现象
运行后的图像,在高次插值中,插值区间的边界区域,插值函数没有很大的偏离原函数,从后面运行的结果可以看出没有在出现龙格现象。在本次插值中,使用切比雪夫零点替换了原先的等距节点,避免了龙格现象的出现。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)