如何在Simulink中使用syms?换个思路解决报错:Function ‘syms‘ not supported for code generation.

问题描述

在Simulink中的User defined function使用syms函数,报错simulink无法使用外部函数。

具体来说:

我想在Predefined function定义如下符号函数作为输入信号,在后续模块传入函数参数赋值,以实现一次定义多次使用,并避免求导时手动修改函数形式:

syms t B A T Phi; 

f = A*sin(2*pi/T*t + Phi)+B;

ps:赋值,符号变量到数值变量的计算过程可使用:

tmp = subs(f,{A,B,T,Phi,t},{A_,B_,T_,Phi_,t_});

value = double(tmp);

结果Sinmulink报错:独立代码生成不支持函数'syms,代码生成器不支持等..Function 'syms' not supported for code generation.

解决方案

思路:不在Simulink中显式使用syms定义变量,将该步骤放到Matlab脚本函数中运行。

举例:同上文例程,将该函数(Predefined function)写在Simulink外部,即Matlab工作目录;然后,在Simulink内部使用coder对象传入参数调用该函数。函数在外部的文件为symsSine.m。

function y = fcn(~)
%将值传入外部函数,返回值供内部使用
coder.extrinsic('symsSine');
A_ = 6;
B_ = 5;
T_ = 10*pi;
Phi_ = 2*pi;
t_ = pi;
y=zeros(1);

[f,u] =  symsSine(A_,B_,T_,Phi_,t_)

y = u;

结果:

实现了期望功能,且syms定义的符号变量 f 并未在Simulink中报错。

进一步,可以实现在Simulink中继续使用返回的符号变量/函数..

如进行diff求导:

f1 = diff(f)

输出:

以上

参考

如何在Simulink Matlab函数中使用符号变量和函数 Syms..

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七月是你的谎言..

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值