MATLAB。
我正在尝试向量化一个循环,其中通过将对角矩阵中的每个单个元素与另一个 n×n 2D 矩阵中的列向量相乘来找到 2D 矩阵(n×n)的每个列向量。看起来矢量化很简单,但我一定遗漏了一些东西。我尝试先将对角矩阵转换为列向量,但它仍然需要一次执行一个元素的操作。
先感谢您。
%% example matrix
B = [ 3 2 .9 2
2 4 1 2
3 4 -1 0
.5 .5 .1 1];
%% find eigenvectors and eigenvalues
[ve, va] = eig(B,'nobalance');
%% get size of B ... 4
[~,q]=size(B);
%% time constants
t0=0;
t = 2000e-6;
%% pre-allocate memory for Matrix Mn (Mnew) and Mp (Mprime)
Mn=zeros(q,1);
Mp=Mn;
%% Original code, runs correctly, not vectorized - steps through each column
for m = 1:q,
Mn(:,m) = exp( va(m,m) * t0) * ve(:,m);
Mp(:,m) = exp( va(m,m) * t ) * ve(:,m);
end
% quick explanation ^ for each column of Mn and Mp, a single value
% exp(va(i,i)*t) is multiplied by a column of ve(:,i)
% vectorizable?
% Mn(column) = A * ve(column), but A is an individual element in a different vector already
%% New code... vectorized?
% random starting idea:
va1 = va * [1; 1; 1; 1]; % changes diagonal matrix into column vector of values, BUT still has to calculate one at a time...