在 simulink 中使用来自 matlab 的表面拟合对象

Use a surface fit object from matlab in simulink

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

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

创建函数句柄:

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

然后使用 Interpreted MATLAB 函数块,您需要

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

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

从执行的角度来看,上述方法不是最快的方法,也不允许生成代码,但它是迄今为止 easiest/quickest 获得一些东西的 运行。