Matlab符号矩阵作为函数的参数而不是单个组件变量

时间:2016-04-21 11:38:01

标签: matlab symbolic-math

我想导出一个涉及矩阵的符号表达式:

% 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)

但似乎没有任何效果。直接方法matlabFunction(myExpr, 'file', 'myExprFunc.m', 'Vars', {'M', 's1', 's2'});返回错误,因为自由变量M_x_y必须作为参数出现。 我目前的解决方案涉及创建一个包装函数,将单个变量分配为M_x_y = M(x,y);,但以“漂亮的方式”完成它会更好。

有人知道解决方案吗?

1 个答案:

答案 0 :(得分:1)

使用符号数学时,请勿使用字符串,例如{'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');