matlab多项式插值方法实现
最近学习计算方法,需要实现一些方法。但是我又不愿意去直接调用matlab原有的方法,因此在这里实现了一些插值方法。
拉格朗日插值法
function yout = LagZ(xmatrix, ymatrix, x)
yout=0;
n = length(xmatrix);
li = ones(1,n);
for i=1:n
for j=1:n
if(i~=j)
li(i) = li(i)*(x-xmatrix(j))/(xmatrix(i)-xmatrix(j));
end
end
end
for i=1:n
yout = yout+ymatrix(i)*li(i);
end
end
调用示例
function testOne(startNumber, endNumber, n)
origin_distance =2000;
x = startNumber:(endNumber-startNumber)/n:endNumber;
%math equation
y = 1./(25.*x.^2+1);
x_lag = startNumber:(endNumber-startNumber)/origin_distance:endNumber;
nx_lag = length(x_lag);
y_lag = zeros(1,nx_lag);
for i=1:nx_lag
y_lag(i) = LagZ(x,y,x_lag(i));
end
%math equation
x_origin = startNumber:(endNumber-startNumber)/origin_distance:endNumber;
y_origin = 1./(25.*x_origin.^2+1);
plot(x_lag,y_lag,'r', 'linewidth', 2);
hold on;
plot(x_origin,y_origin,'b', 'linewidth', 2);
set(gca,'color',[1,0.8,0]);
end