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 拟合到此数据
我有
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 拟合到此数据