在matlab中画出这个插值函数的图像并解决如下问题
问题描述:
二、牛顿插值法
设函数f(x)在n+1个互异点x0, x1, …, xn处的函数值分别为f(x0), f(x1), …, f(xn),称
为f(x)关于点xi, xj的一阶差商(均差)。称一阶差商f[xi, xj]和f[xj, xk]的差商
为f(x)关于点xi, xj和xk的二阶差商(均差)。
一般地,称k – 1阶差商的差商
为k阶差商。并规定f[xi] = f(xi)为f(x)关于点xi的0阶差商。
称
Nn(x) = f[x0] + f[x0, x1](x – x0) + f[x0, x1, x2](x – x0)(x – x1) + … + f[x0, x1, …, xn](x – x0)(x – x1) … (x – xn – 1)
为n次牛顿插值多项式。
答
你好同学,写好newton,一样招呼:
function v = newton(x,y,u)
n = numel(y);
p = ones(size(u));
v = y(1)*p;
for i = 2:n
y = diff(y)./(diff(x)*(i-1));
p = p.*(u-x(1));
v = v + p*y(1);
x = x(2:end);
end
end
主函数
clc;clear
x = [4,9,16,25,36,49,64,81,100];
y = [2,3,4,5,6,7,8,9,10];
% 第(1)题
u = 1:1:100;
for i = 2:9
subplot(2,4,i-1)
plot(x,y,'ro'); hold on
v = newton(x(1:i),y(1:i),u);
plot(u,v,'b-');
title([num2str(i-1),'阶Newton'])
end
% 第(2)题
u = 10:10:200;
vn = arrayfun(@(i)['n=',num2str(i-1)],2:9,'uniform',0);
rn = arrayfun(@(i)['x=',num2str(u(i))],1:numel(u),'uniform',0);
T = table('Size',[numel(u),8],'VariableTypes',repmat("double",1,8),'variablenames',vn,'rownames',rn);
format short
for i = 2:9
v = newton(x(1:i),y(1:i),u);
T{:,i-1} = v(:);
end
T