[Scilab-users] vectorization difficulty
Carrico, Paul
paul.carrico at esterline.com
Tue Jan 15 09:56:05 CET 2019
Dear All
May I ask you advices in order to use vectorization instead of the loop? All the trials I did have failed - the problem I'm confront to comes from the S matrix
Thanks for your feedback
Paul
########################################################
clc
mode(0)
clear
function V=eigen_val(S11, S12, S13, S22, S23, S33)
S_u = [0 S12 S13 ; 0 0 S23 ; 0. 0. 0.];
S_d = [S11 ; S22 ; S33];
S = S_u + S_u' + diag(S_d);
V = gsort(spec(S),'lr','d')'; clear S; clear S_u; clear S_d;
endfunction
n = 10; m = 1;
S11 = rand(n,m);
S22 = rand(n,m);
S33 = rand(n,m);
S12 = rand(n,m);
S23 = rand(n,m);
S13 = rand(n,m);
princ = zeros(n,3);
// with a loop
tic();
princ1 = zeros(n,3*m);
for i = 1 : n
S_u = [0 S12(i,m) S13(i,m) ; 0 0 S23(i,m) ; 0. 0. 0.];
S_d = [S11(i,m) ; S22(i,1) ; S33(i,m)];
S = S_u + S_u' + diag(S_d);
princ1(i,:) = gsort(spec(S),'lr','d')'; clear S; clear S_u; clear S_d;
end
duration1 = toc(); printf("Duration 1 = %g\n",duration1);
// using a function
tic();
princ2 = zeros(n,3*m);
for i = 1 : n
princ2(i,:) = eigen_val(S11(i,m),S12(i,m),S13(i,m),S22(i,m),S23(i,m),S33(i,m));
end
duration2 = toc(); printf("Duration 2 = %g\n",duration2);
isequal(princ1,princ2)
// using vectorization (in combination with the function ?)
i = (1:n)';
S = zeros(3,3,n)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.scilab.org/pipermail/users/attachments/20190115/9c549ad7/attachment.htm>
More information about the users
mailing list