multiplying matrix by another matrix element and using it in a command
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Georgios Kirkinezos
le 14 Nov 2020
Modifié(e) : Bruno Luong
le 15 Nov 2020
Q=[-0.0905 0.0604 0.0301;0.142 -0.239 0.097;0 0 0];
T =[ 1, 3, 5, 7, 10];
e=expm(Q*T); %%% the problem is here
I have a problem with calculating e, i want to multiply Q with each value of T and still use the expm command
0 commentaires
Réponse acceptée
Plus de réponses (3)
James Tursa
le 14 Nov 2020
Modifié(e) : James Tursa
le 15 Nov 2020
You can use a loop
QT = Q .* reshape(T,1,1,[]);
e = zeros(size(QT));
for k=1:size(QT,3)
e(:,:,k) = expm(QT(:,:,k)); % fixed
end
Setsuna Yuuki.
le 14 Nov 2020
You need matrix T to have the same number of rows or columns as matrix Q
Q=[-0.0905 0.0604 0.0301;0.142 -0.239 0.097;0 0 0];
%T =[ 1, 3, 5, 7, 10];
T =[1,3,5]
e=expm(Q*T); %change * --> .*
0 commentaires
Bruno Luong
le 14 Nov 2020
Modifié(e) : Bruno Luong
le 14 Nov 2020
This must be the fastest if your T is a large vector
[P,D] = eig(Q);
e = exp(diag(D)*T(:).');
e = reshape(e,1,size(Q,1),length(T));
e = pagemtimes(P.*e,inv(P))
3 commentaires
Bruno Luong
le 14 Nov 2020
Modifié(e) : Bruno Luong
le 14 Nov 2020
You mean the Jordan form? It does not exist in numerical world. ;-)
I'm kidding. Indeed Q supposes to be diagonalizable.
Q = P*D/P
D diagonal.
Bruno Luong
le 15 Nov 2020
Modifié(e) : Bruno Luong
le 15 Nov 2020
Speed comparison between expm for loop and eigen-value methods. It speed up about 100 fold.
Q = [-0.0905 0.0604 0.0301;
0.142 -0.239 0.097;
0 0 0];
T = linspace(0,10,10000);
tic
clear E1
for i=numel(T):-1:1
E1(:,:,i)=expm(Q*T(i));
end
toc % Elapsed time is 0.227108 seconds.
tic
[P,D] = eig(Q);
E2 = exp(diag(D)*T(:).');
E2 = reshape(E2,[1,size(E2)]);
E2 = pagemtimes(P.*E2,inv(P));
toc % Elapsed time is 0.001398 seconds.
norm(E1(:)-E2(:),Inf) % 4.7531e-16
Voir également
Catégories
En savoir plus sur Logical dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!