急用matlab编写拉格朗日插值算法的程序

急用matlab编写拉格朗日插值算法的程序,第1张

x0=-200;x1=000;x2=100;x3=200;

y0=1700;y1=100;y2=200;y3=1700;

x=06

y=(x-x1)(x-x2)(x-x3)/((x0-x1)(x0-x2)(x0-x3))y0+(x-x0)(x-x2)(x-x3)/((x1-x0)(x1-x2)(x1-x3))y1+(x-x0)(x-x1)(x-x3)/((x2-x0)(x2-x1)(x2-x3))y2+(x-x0)(x-x1)(x-x2)/((x3-x0)(x3-x1)(x3-x2))y3;

disp('y=');disp(y);

结果为:x =

06000

y=

02560

function [x0,y0] = Lagrange_2(x,y,x0)

%输入: x, y 插值节点(点点互异,否则修改为参数形式)

% x0待求点

%输出:x0,y0,插值结果

n = length(x); % 插值节点个数,x,y应该要一致

m = length(x0); % 待求点个数

y0 = zeros(1,m);% 为输出分配空间

for j = 1:m

for i=1:n

% Lagrange插值公式:li(x) = yiprod(x-xj)/prod(xi-xj),i~=j;

xj = x;

xj(i) = [];

y0(j) = y0(j) + y(i)prod( x0(j) -xj ) / prod( x(i) - xj );

end

end

%%%%%%%%%%%%%%

调用方法:

x = [-5:5];

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

x0 = [-5:001:5]; %根据自己电脑性能选取合适步长

[x0,y0] = Lagrange_2(x,y,x0);

hold on;

plot(x0,1/(1+x0^2),'r');%原函数y=1/(1+x^2)图像

plot(x0,y0);%插值函数图像

用matlab画出y=1/(1+25x^2)拉格朗日插值的图像,可以这样来实现。

x0=linspace(-1,1,5); %x在-1到1之间取5等分

y0=1/(1+25x0^2); %计算相应函数的值

xx=-1:005:1;

yy1=Lagrange1(x0,y0,xx);

x0=linspace(-1,1,20); %x在-1到1之间取20等分

y0=1/(1+25x0^2); %计算相应函数的值

yy2=Lagrange1(x0,y0,xx);

plot(xx,yy1,'k-',xx,yy2,'b-',xx,1/(1+25xx^2),'r:')

axis([-1,1,-07,12]);

grid on

legend('5次拉格朗日插值','20次拉格朗日插值','y=1/(1+25x^2)')

xlabel('x');ylabel('y');

title('y=1/(1+25x^2)拉格朗日插值的图像');

运行结果

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

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-05; end;

%

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

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

m文件

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,'')

====================================

x=[ 04 05 06 07 08];

y=[-0916291;-0693147;-0510826;-0356675;-0223144]';

yy=lagrange(x,y,054)

p =

- (14363668061545223x^4)/6755399441055744 + (229230406283396627x^3)/33776997205278720 - (6086876668119665137x^2)/675539944105574400 + (23595121244981107513x)/3377699720527872000 - 186390055565518223/70368744177664000

yy =

-06161

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,'')

以上就是关于急用matlab编写拉格朗日插值算法的程序全部的内容,包括:急用matlab编写拉格朗日插值算法的程序、帮忙编个matlab程序!拉格朗日插值的 runge现象画图!、用matlab画出y=1/(1+25x.^2)拉格朗日插值的图像等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: https://outofmemory.cn/zz/9289760.html

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

发表评论

登录后才能评论

评论列表(0条)

保存