【问题标题】:MATLAB: polyval function for N greater than 1MATLAB:N大于1的polyval函数
【发布时间】:2021-04-09 16:57:27
【问题描述】:

我正在尝试在 Matlab 中绘制二维数据集的多项式拟合。

这是我尝试过的:

rawTable = readtable('Test_data.xlsx','Sheet','Sheet1');
x = rawTable.A;
y = rawTable.B;
figure(1)
scatter(x,y)
c = polyfit(x,y,2);
y_fitted = polyval(c,x);
hold on
plot(x,y_fitted,'r','LineWidth',2)

rawTable.ArawTable.A 是随机生成的数字。 (即 x 数据集不能用以下形式表示:x=0:0.1:100

结果:

second-order polynomial

但我期望的结果看起来像这样(在 Excel 中生成):

enter image description here

如何在 MATLAB 中绘制二阶多项式拟合?

【问题讨论】:

  • 你是在excel里做这个吗?
  • 嗨!你看过how to askminimal example吗?看看吧!这些页面中的想法对于将您的问题传达给社区的其他人至关重要。在您的具体情况下,您应该提供示例数据并更好地定义数据的组成部分。您需要解释预期的行为以及您得到的结果是如何出乎意料的。
  • 数据为excel格式。我使用 MATLAB 从 excel 表中提取数据,并尝试通过这些点绘制二阶最佳拟合线。然而,正如观察到的那样,该图由多个图表组成。
  • 此外,您的问题“我如何为 N(订单)= 2 及以上绘制一条线”是什么意思?这再次解释了预期的行为是什么:什么是“线”?它是二维数据集的多项式拟合吗?它是一些数据集的样条吗?它只是已知分析形式的函数图吗?它是“直线”通常表示的直线吗?等等等等。人们无法判断您的问题是理解polyfit 还是理解Matlab 中的绘图,或者只是遇到了一些语法故障。这就是一个问题在解释时应该完成的内容。
  • @Yuv:请检查我的评论。您应该在问题的正文中解释您不期望的内容。最有可能的情况是您将图形误认为是多个函数的图形,因为您的数据集未排序。通过让其他人猜测他们不应该猜测的事情,你并没有帮助自己。你需要更精确。

标签: matlab regression


【解决方案1】:

我对每个 Matlab 函数的输出含义感到有些困惑。所以我会澄清的。我认为我们也需要一些细节。所以期待一些冗长。但是,最后提供了一个快速答案。

c = polyfit(x,y,2) 给出多项式拟合的系数向量。您可以在documentation之后获取拟合信息,例如误差估计。

将此多项式命名为P。在Matlab中P实际上是函数P=@(x)c(1)*x.^2+c(2)*x+c(3)

假设你有一个单点X,那么polyval(c,X) 输出P(X) 的值。而如果x是一个向量,那么polyval(c,x)就是一个对应于[P(x(1)), P(x(2)),...]的向量。

现在 代表什么是合适的。就像快速查看视觉效果一样,您可以尝试plot(sort(x),polyval(c,sort(x)),'r','LineWidth',2),即。您可以先对数据进行排序,然后尝试在这些 x 值上绘图。

但是,这只是一个 hack,因为 a) 您的数据集可能间隔非常不规则,以至于样条不能代表函数,或者 b) 对整个数据集进行评估是不必要且效率低下的。

在 Matlab 中绘制已知解析形式的二维函数的稳健和“标准”方法如下:

  1. 在要绘制函数的区间内定义一些 均匀分布 x 值。例如,x=1:0.1:10。例如,x=linspace(0,1,100)

  2. 根据这些 x 值评估函数

  3. 将以上两个组件放入plot()plot() 可以将函数绘制为采样点,也可以使用默认的自动spline 连接点。

(对于第 1 步,正交 是模棱两可的,但如果您想用一个词进行交流,这个术语足以描述这个过程。)

因此,您应该执行以下操作,而不是在原始数据集中使用 x

t=linspace(min(x),max(x),100);
plot(t,polyval(c,t),'r','LineWidth',2)

【讨论】:

  • 非常感谢。 @Argyll 你是生命的救星。
  • @Yuv:希望能回答你的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-09
  • 2021-04-13
  • 1970-01-01
  • 2019-08-17
  • 1970-01-01
相关资源
最近更新 更多