MATLAB:N 大于 1 的 polyval 函数

问题描述

我正在尝试在 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 中绘制二阶多项式拟合?

解决方法

我对每个 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 值。

然而,这只是一种黑客行为,因为 a) 您的数据集的间隔可能如此不规则,以至于样条不能代表函数或 b) 对整个数据集进行评估是不必要且低效的。

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

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

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

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

(对于第 1 步,quadrature 是模棱两可的,但如果您希望用一个词进行交流,那么该术语足以具体描述此过程。)

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

t=linspace(min(x),max(x),100);
plot(t,t),2)