Effacer les filtres
Effacer les filtres

multiplying matrix by another matrix element and using it in a command

1 vue (au cours des 30 derniers jours)
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

Réponse acceptée

Matt J
Matt J le 14 Nov 2020
clear e
for i=numel(T):-1:1
e(:,:,i)=expm(Q*T(i));
end

Plus de réponses (3)

James Tursa
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
  1 commentaire
Georgios Kirkinezos
Georgios Kirkinezos le 15 Nov 2020
ALSO WORKS!!!
Giving same result like the other accepted answer!
(note:it is missing a clossing parenthesis in the end )

Connectez-vous pour commenter.


Setsuna Yuuki.
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 * --> .*

Bruno Luong
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
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
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

Connectez-vous pour commenter.

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!

Translated by