利用matlab实现Lagrange 插值多项式

利用matlab实现Lagrange 插值多项式,第1张

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

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

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

去年学的Fortran语言,许多算法都忘了。给你一个去年写的牛顿插值程序,需要改动的地方自己改,貌似循环计算(多层计算)那块处理得不错。

real*8 x(0:5),y(0:5),c(0:5),u1,u2,ci

data y/0.796,0.773,0.744,0.704,0.656,0.602/

open(1,file='7-2.dat')

write(*,*)'input u1=?,u2=?'

read(*,*)u1,u2

do i=0,5

x(i)=(i+1)*0.125

enddo

c(0)=y(0)

do i=1,5

call chashang(x,5,i,ci)

c(i)=ci

write(*,*)'c(i)=,i=',c(i),i

write(1,*)'c(i)=,i=',c(i),i

enddo

call newchazhi(u1,c,x,5)

call newchazhi(u2,c,x,5)

end

subroutine newchazhi(u,c,x,m)

real*8 c(0:m),x(0:m),u,N

S=c(0)

do i=1,5

N=c(i)

do j=0,i-1

N=N*(u-x(j))

enddo

S=S+N

enddo

write(*,*)u,s

write(1,*)u,s

end

subroutine chashang(x,m,i,ci)

real*8 y(0:5),x(0:m),f(1:i),ci

y(0)=0.796

y(1)=0.773

y(2)=0.744

y(3)=0.704

y(4)=0.656

y(5)=0.602

k=0

10 do j=1,i-k

f(j)=(y(j)-y(j-1))/(x(j+k)-x(j-1))

enddo

if(j==1) then

goto 5

else

do j=1,i-k

y(j-1)=f(j)

enddo

k=k+1

goto 10

endif

5 ci=f(j)

return

end

x=[1,2,3,4,5]

y=[1.2,2.5,4.8,10,15]

a=polyfit(x,y,length(x)-1)%插值

poly2sym(a)%输出插值多项式


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存