我想在MuPAD中使用stats::swGOFT
函数。我有一个名为r
的数字向量。我用了
feval(symengine, 'stats::swGOFT', r);
错误是
使用mupadengine / feval时出错(第157行)
MuPAD错误:错误:某些数据类型无效。
所以我尝试了一种更直接的方式,它起作用了:
feval(symengine, 'stats::swGOFT', 1,2,3,4);
但这并没有奏效:
feval(symengine, 'stats::swGOFT', [1,2,3,4]);
我的变量r
是一个1146乘1的双向量。显然我无法手动输入所有数字。那么,如何将向量变量r
传递给MuPAD函数stats::swGOFT
?
答案 0 :(得分:1)
MuPAD不是Matlab。从stats::swGOFT
的当前版本文档中可以看出,此函数需要list,而不是array(Matlab使用的是什么)。许多MuPAD函数自动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 '])'])