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

标签 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); ,但最好以“漂亮的方式”完成它。

有人知道解决方案吗?

最佳答案

不要使用字符串,例如,{'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');

关于Matlab 符号矩阵作为函数的参数而不是单个组件变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36768436/

相关文章:

matlab - matlab中的弯曲箭头

matlab - 在 "hold on"后面加上 "figure"导致剧情不一样

arrays - 如何从 MATLAB 中的矩阵中删除零?

matlab - 符号表达式的最大数值简化

python - 是否可以使用 sympy 创建符号多元正态分布?

wolfram-mathematica - 向 Mathematica 指定额外信息以简化表达式

arrays - 从 3D 元胞数组转换为一组 2D 矩阵

c++ - 数据类型与 arduino 和 coder.ceval 不匹配

python - 如何使用 sympy.physics.quantum 换向器?

python - Sympy 表达式为多项式之比