Polyfit 和 polyval 执行插值

Polyfit and polyval to perform interpolation

我有

x = linspace(-5,5,256) y = 1./(1+x.^2) plot(x,y,'...') %plot of (x,y)

我想用 10 阶多项式对此进行估计,使得多项式与图形相交于 11 个点。

所以,我这样做了:

x2 = linspace(-5,5,11) y2 = 1./(1+x2.^2) p = polyfit(x2,y2,10) %finds coefficients of polynomial of degree 10 that fits x2,y2 y3 = polyval(p,x2) plot(x,y,x2,y3,'...')

我认为 polyfit 会给出最高 10 阶的多项式的系数,它与点 (x2,y2)(即 11 个点)相交 那么 y3 本质上只是 10 阶多项式所在位置的 y 值,因此将它们一起绘制会得到 10 阶多项式,与我的原始图形相交于 11 个唯一点?

我做错了什么?

我的结果:

你的计算是正确的,但你没有以正确的方式绘制函数。生成的图中的蓝线是分段线性的。那是因为您仅在插值点 x2 处计算多项式 p。然后 plot 命令在这些点之间绘制线段,您会看到意想不到的情节。 要获得预期的结果,您只需像这样更密集地评估多项式:

x3 = linspace(-5,-5,500);
y3 = polyval(p,x3);
plot(x3,y3);

考虑点 (1,3)、(2,6.2) 和 (3,13.5)。使用 Matlab 的内置函数 polyfit 获取最佳参数,以将模型 P = Poekt 拟合到此数据