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

时间:2015-04-18 19:43:27

标签: matlab statistics symbolic-math mupad

我想在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

1 个答案:

答案 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 '])'])