multiplication of matrix with long data

5 views (last 30 days)
Hi,
I have a long data (200K+ samples) from which a location vector L (3x1) and a matrix T (euler matrix 3x3) is generated and multiplied l = TL.
On the results of l (3x1) there are operations of sin and atan (to get the required results).
So far, I'm doing a for loop, which is not a Matlab way.
I'd like to speedup the performance of the code.
How can I do it?
  3 Comments
Bruno Luong
Bruno Luong on 14 Jul 2022
"So far, I'm doing a for loop, which is not a Matlab way. "
Anything allowed by MATLAB IS MATLAB way.

Sign in to comment.

Accepted Answer

Bruno Luong
Bruno Luong on 14 Jul 2022
Edited: Bruno Luong on 14 Jul 2022
% Test data
N = 4;
Phi = 2*pi*rand(1,N);
Theta = 2*pi*rand(1,N);
Psi = 2*pi*rand(1,N);
X = rand(1,N);
Y = rand(1,N);
Z = rand(1,N);
Phi = reshape(Phi, 1, 1, []);
Theta = reshape(Theta, 1, 1, []);
Psi = reshape(Psi, 1, 1, []);
X = reshape(X, 1, 1, []);
Y = reshape(Y, 1, 1, []);
Z = reshape(Z, 1, 1, []);
sB = sin(Phi); cB = cos(Phi);
sD = sin(Theta); cD = cos(Theta);
sE = sin(Psi); cE = cos(Psi);
T = [ cD.*cE, -cB.*sE+cE.*sB.*sD, sB.*sE+cB.*sD.*cE;
cD.*sE, cB.*cE+sB.*sD.*sE, -cE.*sB+cB.*sD.*sE;
-sD, sB.*cD, cB.*cD ];
XYZ = [X; Y; Z];
xyz = pagemtimes(T, XYZ)
xyz =
xyz(:,:,1) = 0.3128 0.5127 -0.3960 xyz(:,:,2) = -0.7072 -0.7636 0.1150 xyz(:,:,3) = -0.1876 0.0750 1.0194 xyz(:,:,4) = 1.2058 -0.6237 0.2521
% For older MATLAB
%XYZ = [X, Y, Z];
%xyz = sum(T.*XYZ,2)
  3 Comments
Bruno Luong
Bruno Luong on 14 Jul 2022
Or you can do this:
XYZ = [X, Y, Z];
xyz = sum(T.*XYZ,2)

Sign in to comment.

More Answers (0)

Products


Release

R14SP2

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!