如何解决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.A
和 rawTable.A
是随机生成的数字。 (即 x 数据集不能用以下形式表示:x=0:0.1:100
)
结果:
但我期望的结果看起来像这样(在 Excel 中生成):
如何在 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 中绘制已知解析形式的二维函数的稳健且“标准”的方法如下:
-
在要绘制函数的区间内定义一些均匀间隔 x 值。例如,
x=1:0.1:10
。例如,x=linspace(0,1,100)
。 -
根据这些 x 值评估函数
-
将以上两个组件放入
plot()
。plot()
可以将函数绘制为采样点,也可以使用默认的自动 spline 连接这些点。
(对于第 1 步,quadrature 是模棱两可的,但如果您希望用一个词进行交流,那么该术语足以具体描述此过程。)
因此,不要在原始数据集中使用 x
,您应该执行以下操作:
t=linspace(min(x),max(x),100);
plot(t,t),2)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。