如何用MATLAB 编写interpl插值函数

如何用MATLAB 编写interpl插值函数,第1张

yi = interp1(x,y,xi,method)

已知样本点坐标x,y,求xi处的函数值yi,插值方法是method。

function [输出变量] = 函数名称(输入变量)

% 注释

% 函数体

如下所示,是编写的一个求1到n之和的求和函数 eg_sum,按照上述格式,编写代码如下并保存文件,注意文件命名时不能以数字开头:

function [s]  = eg_sum( n )

% calculate the sum of 1..n

s = 0

for i = 1:n

s = s + i

end

回到控制台Command Window(主界面),注意要使用之前保存的函数文件名来调用函数,如下所示:

>>clear

>>a = eg_sum(10)

运行结果: a = 55

扩展资料:

对于函数f(x),常常不仅知道它在一些点的函数值,而且还知道它在这些点的导数值。这时的插值函数P(x),自然不仅要求在这些点等于f(x)的函数值,而且要求P(x)的导数在这些点也等于f(x)的导数值。这就是埃尔米特插值问题,也称带导数的插值问题。

从几何上看,这种插值要寻求的多项式曲线不仅要通过平面上的已知点组,而且在这些点(或者其中一部分)与原曲线“密切”,即它们有相同的斜率。可见埃尔米特插值多项式比起一般多项式插值有较高的光滑逼近要求。

参考资料来源:百度百科-插值

function

[]=piecewise_hermite(x0,y0,y0_)

n=length(x0)

for

k=1:n-1

p=poly(x0(k+1))/(x0(k)-x0(k+1))

q=poly(x0(k))/(x0(k+1)-x0(k))

i=conv(conv(p,p),(1+2*q))*y0(k)

...

+conv(conv(q,q),(1+2*p))*y0(k+1)

...

+conv(conv(p,p),poly(x0(k)))*y0_(k)

...

+conv(conv(q,q),poly(x0(k+1)))*y0_(k+1)

x=x0(k):0.01:x0(k+1)

fval=polyval(i,x)

plot(x,fval,'r')

hold

on

y=1./(1+x.^2)

plot(x,y,'g')

fprintf('在区间[%f,%f]内\n',x0(k),x0(k+1))

s=poly2sym(i)

vpa(s,6)

end

end

按上面语句试试

Matlab函数M文件Lagrange程序

function yy=lagrange(x,y,xi)

m=length(x)n=length(y)

if m~=n,error('向量x与y的长度必须一致')end

s=0

for i=1:n

z=ones(1,length(xi))

for j=1:n

if j~=i

z=z .*(xi-x(j))/(x(i)-x(j))

end

end

s=s z*y(i)

end

yy=s

上面是拉格朗日插值法,其中xi为要计算的数值比如

x=[0 3 5 9 31]

y=[2 7 10 12 15]

xi=[1 4 7]

yi=Lagrange(x,y,xi)

这是要求在1,4,7处的值。

hermite程序我没有。


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

原文地址: http://outofmemory.cn/yw/11528405.html

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

发表评论

登录后才能评论

评论列表(0条)

保存