[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