【问题标题】:Unpacking a vector into k variables将向量解包为 k 个变量
【发布时间】:2018-02-13 05:17:20
【问题描述】:

我正在学习 matlab 并尝试使用矢量化来实现 small angle approximation。这是我要实现的公式:

我正在为 3 个角度实现此功能:pi / 100pi / 10pi / 6。到目前为止,我已经想出了这个:

x = [pi / 100, pi / 10, pi / 6];
y = sin(x);
e = (y - x) ./ y;

这很好用。现在,我想将结果解压缩为 3 个变量。我知道我可以做到:

RelativeError100 = e(1);
RelativeError10 = e(2);
RelativeError6 = e(end);

但是来自 python 背景,这对我来说似乎有点笨拙。所以我尝试了这个:

[RelativeError100, RelativeError10, RelativeError6] = e

哪些错误,给出Too many output arguments.。所以,我做了一些研究,发现了this,这表明

[RelativeError100, RelativeError10, RelativeError6] = e{:}

这会引发Cell contents reference from a non-cell array object.

我错过了什么,我怎样才能让它发挥作用?还是用matlab不可能?

【问题讨论】:

  • 我喜欢认为这不是微不足道的原因是从数组到单个标量变量是动态变量名称的一半。

标签: matlab vector vectorization


【解决方案1】:

怎么样:

x = [pi / 100, pi / 10, pi / 6];
y = sin(x);
e = num2cell((y - x) ./ y);
[RelativeError100, RelativeError10, RelativeError6] = e{:}

这是因为 {:} 仅在 ecell 而不是 matrix 时才有效。

【讨论】:

  • 这似乎可行,谢谢。我最初尝试过这样的事情:[...] = numcell(e){:} 但它似乎没有用。
  • 据我所知,num2cell(但不是 'numcell')是一个 MATLAB 函数,function(){:} 可能会由于索引未知而返回错误。 :D
  • 对不起,我的意思是num2cell。那是一个错字。再次感谢:)
  • @cᴏʟᴅsᴘᴇᴇᴅ 是的,一些 MATLAB 用户一直要求索引文字和函数调用已有一段时间了。 MathWorks 仍然不愿意。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多