簡體   English   中英

Matlab符號矩陣作為函數的參數而不是單個組件變量

[英]Matlab symbolic matrix as argument of function instead of individual components variables

我想導出文件一個涉及矩陣的符號表達式:

% M is a 2x2 symbolic matrix composed by M_1_1, M_1_2, M_2_1, M_2_2
M = sym('M_%d_%d', [2 2], 'real');
% s1 and s2 are scalar variables
syms('s1', 's2');
% Expression with M, s1 and s2
myExpr = M*[s1;s2];
% Store expression as matlab code in a function file
matlabFunction(myExpr, 'file', 'myExprFunc.m');

但是,由於擴展的表達式是:

myExpr =

 M_1_1*s1 + M_1_2*s2
 M_2_1*s1 + M_2_2*s2

這將創建一個具有擴展輸入參數的函數(每個自由變量一個):

function myExpr = myExprFunc(M_1_1, M_1_2, M_2_1, M_2_2, s1, s2)
...

使用20x20矩陣,這是一場噩夢。 如此簽名會很不錯

function myExpr = myExprFunc(M, s1, s2)

但似乎沒什么用。 straigthforward方法matlabFunction(myExpr, 'file', 'myExprFunc.m', 'Vars', {'M', 's1', 's2'}); 返回錯誤,因為自由變量M_x_y必須作為參數出現。 我目前的解決方案涉及創建一個包裝函數,將各個變量分配為M_x_y = M(x,y); ,但要以“漂亮的方式”完成它會好得多。

有人知道解決方案嗎?

在使用符號數學時,不要使用字符串,例如{'M', 's1', 's2'} 這已被棄用,並且每個Matlab版本對這種用法的直接支持正在消失。 為了達到你想要的效果,你可以使用:

M = sym('M_%d_%d', [2 2], 'real');
syms s1 s2;
myExpr = M*[s1;s2];
matlabFunction(myExpr, 'Vars', {M,s1,s2}, 'file', 'myExprFunc.m');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM