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)拉格朗日插值的图像等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)