我使用fit函数在Matlab中执行了一些数据的曲面拟合。 更具体一点:
func_trim= fit( [hopper_volume, water_ballast_volume], trim, 'poly55');
它返回了一个多变量多项式:
Linear model Poly55:
func_trim(x,y) = p00 + p10*x + p01*y + p20*x^2 + p11*x*y + p02*y^2 + p30*x^3
+ p21*x^2*y + p12*x*y^2 + p03*y^3 + p40*x^4 + p31*x^3*y
+ p22*x^2*y^2 + p13*x*y^3 + p04*y^4 + p50*x^5 + p41*x^4*y
+ p32*x^3*y^2 + p23*x^2*y^3 + p14*x*y^4 + p05*y^5
Coefficients (with 95% confidence bounds):
p00 = -4.742 (-4.745, -4.74)
p10 = 5.068e-05 (4.969e-05, 5.167e-05)
p01 = 0.001447 (0.001436, 0.001459)
p20 = -3.565e-09 (-3.731e-09, -3.399e-09)
p11 = -6.534e-08 (-6.7e-08, -6.369e-08)
p02 = -1.6e-07 (-1.815e-07, -1.385e-07)
p30 = 5.919e-13 (5.795e-13, 6.043e-13)
p21 = 4.683e-12 (4.552e-12, 4.815e-12)
p12 = 1.129e-11 (9.908e-12, 1.267e-11)
p03 = 1.471e-10 (1.282e-10, 1.659e-10)
p40 = -2.017e-17 (-2.059e-17, -1.975e-17)
p31 = -1.562e-16 (-1.611e-16, -1.513e-16)
p22 = -6.93e-16 (-7.444e-16, -6.417e-16)
p13 = -9.909e-16 (-1.551e-15, -4.308e-16)
p04 = -6.751e-14 (-7.516e-14, -5.986e-14)
p50 = 2.446e-22 (2.392e-22, 2.5e-22)
p41 = 2.186e-21 (2.118e-21, 2.254e-21)
p32 = 1.321e-20 (1.243e-20, 1.4e-20)
p23 = 3.805e-20 (2.969e-20, 4.642e-20)
p14 = 2.262e-20 (-6.978e-20, 1.15e-19)
p05 = 1.059e-17 (9.424e-18, 1.175e-17)
我现在想在simulink环境中使用这个对象。 一种选择是通过硬编码在simulink中明确定义它。但是我不喜欢这个,因为系数可能会(经常)随时间变化而且每次都要重复这个。
所以简而言之。有没有更优雅的方法在simulink中直接使用这个对象?
答案 0 :(得分:1)
最简单的方法是将fit对象包装到函数句柄中,然后从Interpreted MATLAB function块调用它。
创建函数句柄:
>> myFunc = @(u)feval(func_trim,u);
然后使用Interpreted MATLAB功能块,您需要
将x和y信号复用在一起,然后将组合信号输入到块中。
使用" myFunc(u)" - 没有双引号 - 作为要调用的函数的名称。
以上不是执行方法中最快的方法,也不允许代码生成,但它是迄今为止最容易/最快的方法。