用matlab编写拉格朗日插值,程序如下,但总是运行有错误,求大神啊!急急急急!要交作业啦!谢谢谢谢!

用matlab编写拉格朗日插值,程序如下,但总是运行有错误,求大神啊!急急急急!要交作业啦!谢谢谢谢!,第1张

出错原因:

函数定义只有一个输出参数,而调用时要求返回两个参数,当然就出错了。

 

修改:

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

运行结果:没出现龙格现象

运行后的图像,在高次插值中,插值区间的边界区域,插值函数没有很大的偏离原函数,从后面运行的结果可以看出没有在出现龙格现象。在本次插值中,使用切比雪夫零点替换了原先的等距节点,避免了龙格现象的出现。

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

原文地址: http://outofmemory.cn/langs/11676093.html

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

发表评论

登录后才能评论

评论列表(0条)

保存