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

文章讲述了在Simulink中遇到的使用syms函数报错问题,通过将syms定义移到Matlab脚本中,并利用coder对象传递参数,成功实现了在Simulink中一次定义多次使用的功能,并能继续进行符号操作如求导。
摘要由CSDN通过智能技术生成

问题描述

在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..

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

七月是你的谎言..

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

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

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

打赏作者

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

抵扣说明:

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

余额充值