[Scilab-users] function and vectorization

4 messages
Open this post in threaded view
|

[Scilab-users] function and vectorization

 Dear All   Most of the time I’ve no issue in mixing functions and vectorization, but here I don’t know why it does not work – one can see that using a vector I, the loop is called only ounce and I do not understand why?   I’ve spent hours in such case  showing I’m not fully at ease with it :-) :-)   Any explanation?   Thanks for your support   Paul   ##################################################################### mode(0) clear   function [Scar_P]=Scalar_product(C, N, M) // Scalar product     Scar_P = (M(1) - C(1))*(N(1) - C(1)) + (M(2) - C(2))*(N(2) - C(2));     printf("C = (%g,%g)\n",C(1),C(2)); printf("N = (%g,%g)\n",N(1),N(2)); printf("M = (%g,%g)\n",M(1),M(2)); endfunction   n = 10;   C = rand(n,2); M = rand(n,2); N = rand(n,5);   Scal = zeros(n); Scal2 = Scal   printf(" ****************\n"); i = 1 : n; Scal(i) = Scalar_product(C(i,:),N(i,1:2)',M(i,:))   printf("\n ****************\n");   for i = 1 : n     Scal2(i) = Scalar_product(C(i,:),N(i,1:2)',M(i,:)); end EXPORT CONTROL : Cet email ne contient pas de données techniques This email does not contain technical data   _______________________________________________ users mailing list [hidden email] http://lists.scilab.org/mailman/listinfo/users
Open this post in threaded view
|

Re: function and vectorization

 Hello, Try: ```function [Scar_P]=Scalar_product(C, N, M) // Scalar product Scar_P = (M(:,1) - C(:,1)).*(N(:,1) - C(:,1)) + (M(:,2) - C(:,2)).*(N(:,2) - C(:,2)); //printf("C = (%g,%g)\n",C(1),C(2)); printf("N = (%g,%g)\n",N(1),N(2)); printf("M = (%g,%g)\n",M(1),M(2)); endfunction with (do not transpose N(i,1:2)) ``` i = 1 : n; Scal(i) = Scalar_product(C(i,:),N(i,1:2),M(i,:)) S. Le 07/11/2018 à 12:35, Carrico, Paul a écrit :   ##################################################################### mode(0) clear   function [Scar_P]=Scalar_product(C, N, M) // Scalar product     Scar_P = (M(1) - C(1))*(N(1) - C(1)) + (M(2) - C(2))*(N(2) - C(2));     printf("C = (%g,%g)\n",C(1),C(2)); printf("N = (%g,%g)\n",N(1),N(2)); printf("M = (%g,%g)\n",M(1),M(2)); endfunction   n = 10;   C = rand(n,2); M = rand(n,2); N = rand(n,5);   Scal = zeros(n); Scal2 = Scal   printf(" ****************\n"); i = 1 : n; Scal(i) = Scalar_product(C(i,:),N(i,1:2)',M(i,:))   printf("\n ****************\n");   for i = 1 : n     Scal2(i) = Scalar_product(C(i,:),N(i,1:2)',M(i,:)); end ```-- Stéphane Mottelet Ingénieur de recherche EA 4297 Transformations Intégrées de la Matière Renouvelable Département Génie des Procédés Industriels Sorbonne Universités - Université de Technologie de Compiègne CS 60319, 60203 Compiègne cedex Tel : +33(0)344234688 http://www.utc.fr/~mottelet``` _______________________________________________ users mailing list [hidden email] http://lists.scilab.org/mailman/listinfo/users
 Hello, `If your matrices are not too big, ` `diag((M-C)*(N(:,1:2)-C)')` may do the job: it gives the same result as Stéphane’s solution HTH Denis     [@@ THALES GROUP INTERNAL @@]   Unité Mixte de Physique CNRS / THALES 1 Avenue Augustin Fresnel 91767 Palaiseau CEDEx - France Tel : +33 (0)1 69 41 58 52 Fax : +33 (0)1 69 41 58 78 e-mail :   De : users [mailto:[hidden email]] De la part de Stéphane Mottelet Envoyé : mercredi 7 novembre 2018 13:40 À : [hidden email] Objet : Re: [Scilab-users] function and vectorization   Hello, Try: `function [Scar_P]=Scalar_product(C, N, M) // Scalar product` ` ` `    Scar_P = (M(:,1) - C(:,1)).*(N(:,1) - C(:,1)) + (M(:,2) - C(:,2)).*(N(:,2) - C(:,2));` ` ` `    //printf("C = (%g,%g)\n",C(1),C(2)); printf("N = (%g,%g)\n",N(1),N(2)); printf("M = (%g,%g)\n",M(1),M(2));` ` ` `endfunction` ` ` `with (do not transpose N(i,1:2))` i = 1 : n; Scal(i) = Scalar_product(C(i,:),N(i,1:2),M(i,:)) S. Le 07/11/2018 à 12:35, Carrico, Paul a écrit :   ##################################################################### mode(0) clear   function [Scar_P]=Scalar_product(C, N, M) // Scalar product     Scar_P = (M(1) - C(1))*(N(1) - C(1)) + (M(2) - C(2))*(N(2) - C(2));     printf("C = (%g,%g)\n",C(1),C(2)); printf("N = (%g,%g)\n",N(1),N(2)); printf("M = (%g,%g)\n",M(1),M(2)); endfunction   n = 10;   C = rand(n,2); M = rand(n,2); N = rand(n,5);   Scal = zeros(n); Scal2 = Scal   printf(" ****************\n"); i = 1 : n; Scal(i) = Scalar_product(C(i,:),N(i,1:2)',M(i,:))   printf("\n ****************\n");   for i = 1 : n     Scal2(i) = Scalar_product(C(i,:),N(i,1:2)',M(i,:)); end   `-- ` `Stéphane Mottelet` `Ingénieur de recherche` `EA 4297 Transformations Intégrées de la Matière Renouvelable` `Département Génie des Procédés Industriels` `Sorbonne Universités - Université de Technologie de Compiègne` `CS 60319, 60203 Compiègne cedex` `Tel : +33(0)344234688` `http://www.utc.fr/~mottelet` _______________________________________________ users mailing list [hidden email] http://lists.scilab.org/mailman/listinfo/users Denis Crété
 In reply to this post by mottelet Thanks Stéphane   Works fine and fast (I’m speaking about my application :-) )   Paul EXPORT CONTROL : Cet email ne contient pas de données techniques This email does not contain technical data   De : users [mailto:[hidden email]] De la part de Stéphane Mottelet Envoyé : mercredi 7 novembre 2018 13:40 À : [hidden email] Objet : [EXTERNAL] Re: [Scilab-users] function and vectorization   Hello, Try: `function [Scar_P]=Scalar_product(C, N, M) // Scalar product` ` ` `    Scar_P = (M(:,1) - C(:,1)).*(N(:,1) - C(:,1)) + (M(:,2) - C(:,2)).*(N(:,2) - C(:,2));` ` ` `    //printf("C = (%g,%g)\n",C(1),C(2)); printf("N = (%g,%g)\n",N(1),N(2)); printf("M = (%g,%g)\n",M(1),M(2));` ` ` `endfunction` ` ` `with (do not transpose N(i,1:2))` i = 1 : n; Scal(i) = Scalar_product(C(i,:),N(i,1:2),M(i,:)) S. Le 07/11/2018 à 12:35, Carrico, Paul a écrit :   ##################################################################### mode(0) clear   function [Scar_P]=Scalar_product(C, N, M) // Scalar product     Scar_P = (M(1) - C(1))*(N(1) - C(1)) + (M(2) - C(2))*(N(2) - C(2));     printf("C = (%g,%g)\n",C(1),C(2)); printf("N = (%g,%g)\n",N(1),N(2)); printf("M = (%g,%g)\n",M(1),M(2)); endfunction   n = 10;   C = rand(n,2); M = rand(n,2); N = rand(n,5);   Scal = zeros(n); Scal2 = Scal   printf(" ****************\n"); i = 1 : n; Scal(i) = Scalar_product(C(i,:),N(i,1:2)',M(i,:))   printf("\n ****************\n");   for i = 1 : n     Scal2(i) = Scalar_product(C(i,:),N(i,1:2)',M(i,:)); end   `-- ` `Stéphane Mottelet` `Ingénieur de recherche` `EA 4297 Transformations Intégrées de la Matière Renouvelable` `Département Génie des Procédés Industriels` `Sorbonne Universités - Université de Technologie de Compiègne` `CS 60319, 60203 Compiègne cedex` `Tel : +33(0)344234688` `http://www.utc.fr/~mottelet` _______________________________________________ users mailing list [hidden email] http://lists.scilab.org/mailman/listinfo/users