2

我想stats::swGOFT在 MuPAD 中使用该功能。我有一个名为 的数值向量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呢?

4

1 回答 1

1

MuPAD 不是 Matlab。从当前版本的文档stats::swGOFT来看,这个函数似乎需要一个列表,而不是一个数组(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 '])'])
于 2015-04-18T22:21:07.043 回答