Vectorization of Operation inside Matrix
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
Laurel Castillo
am 18 Dez. 2018
Bearbeitet: Guillaume
am 18 Dez. 2018
DH is a 7*5 double.
The values in each row of DH are used for calculation in each loop.
To speed up, I've used pre-location. But can it be faster with vectorization?
DH = psm_m.DH;
n = size(DH,1);
T_i_All = zeros(4,4,n);
for i = 1:n
T_i_All (:,:,i)= [cos(DH(i,5)) -sin(DH(i,5)) 0 DH(i,3);
(sin(DH(i,5)))*(cos(DH(i,2))) (cos(DH(i,5)))*(cos(DH(i,2))) -sin(DH(i,2)) -(sin(DH(i,2)))*DH(i,4);
(sin(DH(i,5)))*(sin(DH(i,2))) (cos(DH(i,5)))*(sin(DH(i,2))) cos(DH(i,2)) (cos(DH(i,2)))*DH(i,4);
0 0 0 1];
end
I followed the MATLAB example
t = 0:.01:10; %example
y = sin(t); %example
But it doesn't work.
i=1:n;
T_i_All (:,:,i)= [cos(DH(i,5)) -sin(DH(i,5)) 0 DH(i,3);
(sin(DH(i,5)))*(cos(DH(i,2))) (cos(DH(i,5)))*(cos(DH(i,2))) -sin(DH(i,2)) -(sin(DH(i,2)))*DH(i,4);
(sin(DH(i,5)))*(sin(DH(i,2))) (cos(DH(i,5)))*(sin(DH(i,2))) cos(DH(i,2)) (cos(DH(i,2)))*DH(i,4);
0 0 0 1];
(Error using horzcat
Dimensions of matrices being concatenated are not consistent.)
Any help? Thanks!
0 Kommentare
Akzeptierte Antwort
Guillaume
am 18 Dez. 2018
First, permute DH so that the rows are in the 3rd dimension as in your output. Then you can vectorise your calculation:
DH = permute(psm_m.DH, [3 2 1]);
n = size(DH, 3);
T_i_All = [cos(DH(1, 5, :)), -sin(DH(1, 5, :)), repmat(0, 1, 1, n), DH(1, 3, :);
sin(DH(1, 5, :)).*cos(DH(1, 2, :)), cos(DH(1, 5, :)).*cos(DH(1, 2, :)), -sin(DH(1, 2, :)), -sin(DH(1, 2, :)).*DH(1, 4, :);
sin(DH(1, 5, :)).*sin(DH(1, 2, :)), cos(DH(1, 5, :)).*sin(DH(1, 2, :)), cos(DH(1, 2, :)), cos(DH(1, 2, :)).*DH(1, 4, :);
repmat([0 0 0 1], 1, 1, n)]
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Loops and Conditional Statements finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!