如何将 Matlab 向量变量传递给 MuPAD 函数?

How to pass a Matlab vector variable to a MuPAD function?

我想使用MuPAD中的stats::swGOFT功能。我有一个名为 r 的数值向量。我用了

feval(symengine, 'stats::swGOFT', r); 

错误是

Error using mupadengine/feval (line 157)
MuPAD error: Error: Some data are of invalid type.

所以我尝试了更直接的方法,效果很好:

feval(symengine, 'stats::swGOFT', 1,2,3,4);

但这没有用:

feval(symengine, 'stats::swGOFT', [1,2,3,4]);

我的变量 r 是一个 1146×1 双精度向量。显然我不能手动输入所有数字。那么,如何将向量变量r传递给MuPAD函数stats::swGOFT

MuPAD 不是 Matlab。从 stats::swGOFT, it appears that this function requires a list, as opposed to an array (what Matlab uses). Many MuPAD functions automatically coerce 输入的当前版本文档到所需的格式,但在这种情况下似乎不会发生。如果您想使用数值从 Matlab 中调用此函数,您有多种选择 - 这是一个适用于浮点和符号数值的简单方法:

r = randn(1146,1);
rStr = char(sym(r(:).'));
feval(symengine, 'stats::swGOFT', rStr(9:end-2))

这个应该使用 sprintf:

对浮点值的大型数据集更快地执行字符串转换
r = randn(1146,1);
rStr = ['[' sprintf('%.17g', r(1)) sprintf(',%.17g', r(2:end)) ']'];
feval(symengine, 'stats::swGOFT', rStr)

既然是自己转成字符串,不妨将上面的转成直接使用evalin

r = randn(1146,1);
rStr = [ sprintf('%.17g', r(1)) sprintf(',%.17g', r(2:end)) ];
evalin(symengine, ['stats::swGOFT([' rStr '])'])