gpt4 book ai didi

matlab - 矢量化:矩阵数组乘法逐个元素

转载 作者:太空宇宙 更新时间:2023-11-03 20:20:06 24 4
gpt4 key购买 nike

我有一个矩阵:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com