如何在MATLAB中制作像vec(x)这样的向量?

时间:2017-12-01 23:09:53

标签: matlab vector

我试图复制这个公式:

formula

我已经在工作区中收集了所有变量。然而,估计vec(Theta')似乎不起作用,所以我有点卡住了。

Theta = A*B-C;
vTheta = vec(Theta');

ABC已定义。问题是MATLAB似乎不知道函数vec来执行我想要对Theta执行的操作,如公式中那样。

vec(Theta')

如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

我不知道你从哪里得到这个等式,但是vec是R中的一个函数,也许它与此有关?如果要将矩阵Theta转换为矢量,请执行

Theta(:)

编辑:如果您需要首先转置矩阵,MATLAB可能不允许您Theta'(:)。而是分两步完成:

tmp = Theta'; tmp(:)

答案 1 :(得分:0)

Colon Operator上方是向量化定义的变量的方式。

但是,有时候我们想要向量化变量的子集。
假设我们有一个矩阵-mA,我们想向量化它的一个子部分-mA(2:3, 4:7)

一种方法是定义一个新变量并将其向量化:

vA = mA(2:3, 4:7);
vA = vA(:);

但是,如果我们只想在另一个表达式中仅使用一次,该怎么办?
我们可以摆脱生成显式变量的需要吗?

不幸的是,MATLAB不具有view()中的Julia功能。
但是,如果您想避免明确命名新变量(我不确定MATLAB的JIT Engine是否也可以像Julia一样使内存分配无效),您可以这样做:

reshape(mA(2:3, 4:7), [], 1)

这将始终产生列向量。
您还可以使用:

reshape(mA(2:3, 4:7), 1, [])

生成行向量。

例如,您可以这样做:

reshape(mA(2:3, 4:7), 1, []) * reshape(mA(2:3, 4:7), [], 1, )

这将是这些元素的平方值之和。