首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将Matlab向量变量传递给MuPAD函数?

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

Stack Overflow用户
提问于 2015-04-18 19:43:27
回答 1查看 544关注 0票数 2

我想在stats::swGOFT中使用MuPAD函数。我有一个名为r的数值向量。我用过

代码语言:javascript
复制
feval(symengine, 'stats::swGOFT', r); 

错误是

使用mupadengine/feval时出错(第157行) MuPAD错误:错误:一些数据是无效类型的。

所以我尝试了一种更直接的方法,它起作用了:

代码语言:javascript
复制
feval(symengine, 'stats::swGOFT', 1,2,3,4);

但这不管用:

代码语言:javascript
复制
feval(symengine, 'stats::swGOFT', [1,2,3,4]);

我的变量r是一个1146乘1的双矢量.显然,我不能手动输入所有的数字。因此,如何将向量变量r传递给MuPAD函数stats::swGOFT

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-18 22:21:07

MuPAD不是Matlab。从stats::swGOFT的当前版本文档来看,这个函数似乎需要一个列表,而不是数组 ( Matlab所使用的)。许多MuPAD函数自动以所需的格式输入coerce,但在这种情况下似乎不发生这种情况。如果您想使用数字值从Matlab调用此函数,您可以使用几个选项--这里有一个简单的选项,可以同时用于浮点数和符号数字值:

代码语言:javascript
复制
r = randn(1146,1);
rStr = char(sym(r(:).'));
feval(symengine, 'stats::swGOFT', rStr(9:end-2))

对于使用sprintf的浮点值的大型数据集,此方法应该更快地执行字符串转换。

代码语言:javascript
复制
r = randn(1146,1);
rStr = ['[' sprintf('%.17g', r(1)) sprintf(',%.17g', r(2:end)) ']'];
feval(symengine, 'stats::swGOFT', rStr)

由于您自己正在转换为字符串,所以最好将上面的内容转换为直接使用evalin

代码语言:javascript
复制
r = randn(1146,1);
rStr = [ sprintf('%.17g', r(1)) sprintf(',%.17g', r(2:end)) ];
evalin(symengine, ['stats::swGOFT([' rStr '])'])
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29721967

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档