matlab拉格朗日插值法程序

matlab拉格朗日插值法程序,第1张

function yh=lagrange (x,y,xh)

n = length(x)

m = length(xh)

yh = zeros(1,m)

c1 = ones(n-1,1)

c2 = ones(1,m)

for i=1:n

xp = x([1:i-1 i+1:n])

yh = yh + y(i)*prod((c1*xh-xp'*c2)./(x(i)-xp'*c2))

end

注:该程序只可一次计算实现一个插值计算。可实现多个插值计算的程序如下:

function yh=lagrange(x,y,xh)

n = length(x)

m = length(xh)

x = x(:)

y = y(:)

xh = xh(:)

yh = zeros(m,1)

c1 = ones(1,n-1)

c2 = ones(m,1)

for i=1:n,

xp = x([1:i-1 i+1:n])

yh = yh + y(i) * prod((xh*c1-c2*xp')./(c2*(x(i)*c1-xp')),2)

end

根据插值多项式的唯一性,两种方法的结果应该是一样的。条条道路通罗马,只是方法不同而已,牛顿法要比拉格朗日法优越简单。

Matlab函数M文件Lagrange程序function yy=lagrange(x,y,xi) m=length(x)上面是拉格朗日插值法,其中xi为要计算的数值比如 x=[0 3 5 9 31]Q

clear allclc

x0=1:5

y0=sin(x0)

x=1:0.2:2

y0=lagrange(x0,y0,x)

命令窗口输这个就没有问题。

扩展资料:

如果这特定函数是多项式,就称它为插值多项式。利用插值基函数很容易得到拉格朗日插值多项式,公式结构紧凑,在理论分析中甚为方便,但当插值节点增减时全部插值基函数均要随之变化,整个公式也将发生变化,这在实际计算中是很不方便的,为了克服这一缺点,提出了牛顿插值。

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

我看看我有没有,好像我有一个拉格朗日插值法的程序

function h = hlagr2(L,x)

% HLAGR2

% MATLAB m-file for fractional delay approximation

%拉格朗日插值法的实现函数

% by LAGRANGE INTERPOLATION method

% h = hlagr2(L,x) returns a length L (real) FIR

% filter which approximates the fractional delay

% of x samples.

% Input: L = filter length (filter order N = L-1)

%x = fractional delay (0 <x <= 1)

% Output: Filter coefficient vector h(1)...h(L)

% Subroutines: standard MATLAB functions

N = L-1 % filter order

M = N/2 % middle value

if (M-round(M))==0 D=x+M % integer part closest to middle

else D=x+M-0.5end

%

h=ones(1,(N+1))

%

for n=0:N

n1=n+1

for k=0:N

if (k~=n)

h(n1) = h(n1)*(D-k)/(n-k)

end % if

end% for k

end% for n

这个是用于分数延迟滤波器中拉格朗日插值法的,你可以试试看。或者仿照一下。


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

原文地址: https://outofmemory.cn/yw/7869926.html

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

发表评论

登录后才能评论

评论列表(0条)

保存