在 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 函数块,您需要
将 x 和 y 信号复用在一起,然后将组合信号馈入模块。
使用 "myFunc(u)" - 不带双引号 - 作为要调用的函数的名称。
从执行的角度来看,上述方法不是最快的方法,也不允许生成代码,但它是迄今为止 easiest/quickest 获得一些东西的 运行。
我在 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 函数块,您需要
将 x 和 y 信号复用在一起,然后将组合信号馈入模块。
使用 "myFunc(u)" - 不带双引号 - 作为要调用的函数的名称。
从执行的角度来看,上述方法不是最快的方法,也不允许生成代码,但它是迄今为止 easiest/quickest 获得一些东西的 运行。