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

Matlab符号矩阵作为函数的参数,而不是单个分量变量,matlab,symbolic-math,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 mat

我想将包含矩阵的符号表达式导出到文件:

% 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
这将创建一个具有扩展输入参数的函数(每个自由变量一个):

对于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');

哇!这就像使用变量而不是字符串版本一样简单。工作起来很有魅力。非常感谢。(编辑问题以删除不匹配的括号…只是输入错误)。
M = sym('M_%d_%d', [2 2], 'real');
syms s1 s2;
myExpr = M*[s1;s2];
matlabFunction(myExpr, 'Vars', {M,s1,s2}, 'file', 'myExprFunc.m');