如何将 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 '])'])
我想使用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 '])'])