服務器租用多少錢一個月南京關(guān)鍵詞seo公司
問題描述
在Simulink中的User defined function使用syms函數(shù),報錯simulink無法使用外部函數(shù)。
具體來說:
我想在Predefined function定義如下符號函數(shù)作為輸入信號,在后續(xù)模塊傳入函數(shù)參數(shù)賦值,以實現(xiàn)一次定義多次使用,并避免求導時手動修改函數(shù)形式:
syms t B A T Phi; f = A*sin(2*pi/T*t + Phi)+B;
ps:賦值,符號變量到數(shù)值變量的計算過程可使用:
tmp = subs(f,{A,B,T,Phi,t},{A_,B_,T_,Phi_,t_});value = double(tmp);
結(jié)果Sinmulink報錯:獨立代碼生成不支持函數(shù)'syms,代碼生成器不支持等..Function 'syms' not supported for code generation.
解決方案
思路:不在Simulink中顯式使用syms定義變量,將該步驟放到Matlab腳本函數(shù)中運行。
舉例:同上文例程,將該函數(shù)(Predefined function)寫在Simulink外部,即Matlab工作目錄;然后,在Simulink內(nèi)部使用coder對象傳入?yún)?shù)調(diào)用該函數(shù)。函數(shù)在外部的文件為symsSine.m。
function y = fcn(~)
%將值傳入外部函數(shù),返回值供內(nèi)部使用
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;
結(jié)果:
實現(xiàn)了期望功能,且syms定義的符號變量 f 并未在Simulink中報錯。
進一步,可以實現(xiàn)在Simulink中繼續(xù)使用返回的符號變量/函數(shù)..
如進行diff求導:
f1 = diff(f)
輸出:
以上
參考
如何在Simulink Matlab函數(shù)中使用符號變量和函數(shù) Syms..