Matlab / Simulink 多边形拟合

Matlab / Simulink polyfit

我想将二次方程拟合到图中,如 所示。

我已经 "From workspace" 块和 "Scope" 块 .

现在我的问题是如何拟合二阶图。我已经 "constant" 块我有 "cars" 矩阵。然后我有 "ramp" 块,它在 1-365 之间创建斜率,如 所示。

然后我有 "Least Squares Polynomial Fit" 和 "Polynomial Evaluation" 个块 。我做错了什么因为它不起作用?

这是我的 matlab 代码:

n = importdata('n.txt',';')
cars = n(:,2)
trucks = n(:,3)
bus = n(:,4)
t = linspace(1,365,365)
t = transpose(t)

它给我错误 "Error in port widths or dimensions. Output port 1 of .. is a [32x3] matrix." 和 "The number of rows of input A must match the number of rows of input B."

鉴于您展示的模型,我假设您已经看过 Least Square Polynomial Fit 块的示例,并且完全误解了它在做什么。

它显示了一个示例,其中多项式的系数作为时间的函数是已知的,然后使用 Polynomial Evaluation 块计算多项式,然后使用 Least Square Polynomial Fit 获得系数的多项式再次返回。也就是说,它表明当数据为 "round tripped" 时,通过两个块你会回到你开始的地方,据说让你相信这些块是 "doing the right thing".

但是他们显示的不是你想做的,因此你需要一个不同的模型。

如果您查看 Polynomial Evaluation 块的文档,有几个示例说明了预期的输入内容。

第一个输入是自变量,在您的情况下似乎应该是模拟时间。您可以为此使用 Ramp,但为什么不使用 Clock 块。 (如果您确实使用 Ramp,那么您希望它具有 0Initial Value,而不是 365,如您在问题中的图片所示。)

第二个输入是多项式的系数作为向量。这些可以预先生成(例如使用 MATLAB 的 polyfit)函数,或者可以使用 Least Square Polynomial Fit 块动态生成。

也就是说,看起来你很想要下面这个模型: