【问题标题】:Polyfit and polyval to perform interpolationPolyfit 和 polyval 执行插值
【发布时间】:2015-05-06 11:09:36
【问题描述】:

我有

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,而且还必须更密集地评估x3 = linspace(-5,-5,500); y3 = polyval(p,x3); plot(x3,y3);。由于您只在插值点进行评估,因此输出的绘图在这些评估之间带有蓝色线段。
  • 嘿,谢谢!有效
  • 虽然问题和答案都是微不足道的,只是为了遵循协议;),@knedlsepp,你会根据你的评论做出回答,以便 elbarto 可以接受吗?
  • @A.Donda:对不起。你当然是对的!

标签: matlab interpolation function-interposition


【解决方案1】:

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

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

【讨论】:

  • 我实际上只是最终使用了y3 = polyval(p,x),然后绘制了(x,y3) 但是是的,这是我的潜在错误。谢谢亲!
【解决方案2】:

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

【讨论】:

  • 这个答案并没有超出接受的答案。
猜你喜欢
  • 1970-01-01
  • 2013-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-22
  • 2020-08-31
  • 1970-01-01
相关资源
最近更新 更多