【问题标题】:How to use syms in Simulink Matlab function block如何在 Simulink Matlab 功能块中使用 syms
【发布时间】:2017-02-16 10:25:53
【问题描述】:

我想解决ab+tau之间expm(A*s)的积分,其中tau是时变延迟。

我在 Simulink 中创建了一个以 tau 为输入的 Matlab Function 模块,如下所示:

function y = compute_int(u, tau)
syms s
gamma=double(int(expm(A*s),s,a,b+tau)); 
B = [gamma; 1]
y = B*u;

之前定义了Aab。但是有一个问题:simulink 不支持函数syms

关于如何处理积分的任何想法?我试过了

coder.extrinsic('syms');

但它不起作用。

谢谢你的建议!!

【问题讨论】:

  • 你可以尝试使用integral进行数值积分

标签: matlab simulink anonymous-function symbolic-math


【解决方案1】:

最有用的方法:

我们不能在 Simulink 中使用符号变量和匿名函数。但是我们可以为 out 函数创建另一个 .m 文件并将其加载到 Simulink 中的 Matlab 功能块中:

myIntegral.m

    function out = myIntegral(in)
    A = [1 2 3; 4 5 6; 7 8 9];
    myfun = @(s) expm(A.*s);
    out = integral(myfun,0,in,'ArrayValued',true);
    end

Matlab 功能块代码:

function y = fcn(u)
%#codegen
coder.extrinsic('myIntegral');
y = zeros(3);
y = myIntegral(u);

它有效:

附:顺便说一句 - 我试过了

syms s1

这里没有报错,但是Simulink还是不能使用这个s1变量:

未定义的函数或变量's1'。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多