如何在Simulink中实现在线多项式曲线拟合并支持代码生成
Simulink三次多项式拟合支持代码生成解决方案
1 兼容代码生成的实现方法
fit属于Curve Fitting Toolbox专属函数,本身不支持代码生成,你可以手动实现三次多项式的最小二乘求解逻辑,所有运算均为基础MATLAB操作,完全兼容代码生成,且运算效率更高,适配1ms仿真步长的实时更新需求。
对应的MATLAB Function代码如下:
function [p1, p2, p3, p4] = fcn(x,y) % 输入x、y为20×1的Pos_x、Pos_y向量 % 构造三次多项式拟合的范德蒙矩阵 V = [x.^3, x.^2, x, ones(length(x), 1)]; % 最小二乘求解系数,如需提升数值稳定性可改用带正则项的写法: % p = (V'*V + 1e-6*eye(4)) \ (V'*y); p = V \ y; p1 = p(1); p2 = p(2); p3 = p(3); p4 = p(4); end
2 其他可行方案
- 若使用的MATLAB版本≥R2021a,
polyfit函数已原生支持代码生成,可直接替换fit实现功能,代码示例:
function [p1, p2, p3, p4] = fcn(x,y) p = polyfit(x, y, 3); p1 = p(1); p2 = p(2); p3 = p(3); p4 = p(4); end
- 若拟合仅用于离线校准、不需要每个仿真步长实时更新系数,可将拟合逻辑放在仿真初始化回调中运行,将得到的固定系数作为常量导入Simulink模型,完全避开运行时代码生成的限制。
- 面向嵌入式部署场景时,可以自行编写C语言实现三次多项式拟合逻辑,在MATLAB Function中通过
coder.ceval调用预编译的C代码,可获得最优运行性能。
内容的提问来源于stack exchange,提问作者Ehab Abdelkarim
相关产品推荐
相关产品推荐

