我有一个矩阵:
R = [0 -1;1 0];
array = 1:1:10;
还有 x0 = [2;1]
如何在没有循环的情况下以最有效的方式获取另一个数组?
array2 = [expm(1*R) expm(2*R) expm(3*R) .... expm(10*R)];
然后我想获得
array3
的 2 维 10 使得:
array3 = [expm(1*R)*x0 expm(2*R)*x0 expm(3*R)*x0 .... expm(10*R)*x0];
最佳答案
来自 wikipedia :
If a matrix is diagonal its exponential can be obtained by exponentiating each entry on the main diagonal.
鉴于可以从 {1*R, 2*R,...}
创建 block 对角矩阵,那么可以获取其指数并将其整形为 [2 * n ]
并且它可以乘以 x0
。
但是它的性能可能比 for 循环差。
R = [0 -1;1 0];
array = 1:1:10;
x0 = [2;1]
n = numel(array);
result = reshape(expm(kron(spdiags(array.',0,n,n),R))*repmat(x0,n,1),2,[]);
对于小尺寸(小于 70 个元素)的数组
,全矩阵更有效:
result = reshape(expm(kron(diag(array),R))*repmat(x0,n,1),2,[]);
关于matlab - 矢量化:矩阵数组乘法逐个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44992537/