在simulink中使用matlab中的曲面拟合对象

时间:2015-09-04 08:58:24

标签: simulink

我使用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中直接使用这个对象?

1 个答案:

答案 0 :(得分:1)

最简单的方法是将fit对象包装到函数句柄中,然后从Interpreted MATLAB function块调用它。

创建函数句柄:

>> myFunc = @(u)feval(func_trim,u);

然后使用Interpreted MATLAB功能块,您需要

  1. 将x和y信号复用在一起,然后将组合信号输入到块中。

  2. 使用" myFunc(u)" - 没有双引号 - 作为要调用的函数的名称。

  3. 以上不是执行方法中最快的方法,也不允许代码生成,但它是迄今为止最容易/最快的方法。