2017-02-16 27 views
3

expm(A*s)の積分をab+tauの間で解きたいと考えています。ここで、tauは時変遅延です。Simulink Matlab関数ブロックでsymsを使用する方法

私はこのように、Simulinkで入力としてtauとMATLAB関数ブロックを作成した:

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

abが前に定義されています。ただし、問題があります。関数symsはsimulinkではサポートされていません。

どのように積分を処理するためのアイデア?試しました

coder.extrinsic('syms'); 

ただし、動作しません。

ありがとうございます。

+0

「積分」を使用して数値的に積分することができます –

答えて

1

最も有効な方法:

私たちは、Simulinkでシンボリック変数や無名関数を使用することはできません。しかし、我々はアウト機能のための別の.mファイルを作成し、SimulinkでMATLAB Functionブロックにロードすることができます

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ブロックコード:それは作品

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

enter image description here

PSところで - 私は

syms s1 

を試してみましたが、そこここにはエラーはありませんが、Simulinkは、まだこのs1変数を使用することはできません。

未定義の関数や変数「S1」を。

+0

ありがとう、それは積分を使って動作します! – Betelgeuse

+0

私は積分を計算する他の方法がブロック "解釈されたmatlab fnc" – Betelgeuse

+0

であることを発見しました。また、[連続的な積分](https://www.mathworks.com/help/simulink/slref/integrator)もあります。 html)と[discrete integral](https://www.mathworks.com/help/simulink/slref/discretetimeintegrator.html)のブロックがあります。それらも便利です! –

関連する問題