[Scilab-users] Is there a way to do it with Matrix Operations?

Heinz Nabielek heinznabielek at icloud.com
Mon Sep 25 20:01:06 CEST 2017


On 25.09.2017, at 18:58, Rafael Guerra wrote:

> Hi Heinz,
>  
> Your code example is not working.
> The index ‘i’ runs out of bounds.
>  
> Regards,
> Rafael


Sorry, I had forgotten the code line
-->P=cumsum(p)';

So my question again: can you suggest matrix operations that make my code more efficient? The code is meant to generate random deviates for a user-defined discrete distribution.
Below the full set of instructions and example solutions that are good, but achieved in an inefficient way.
Heinz

-->p=[0.1176471 0.2352941 0.0588235 0.3882353 0.2 ];
 
-->P=cumsum(p)';
 
-->N=100;X=grand(7,N,'def');C=[];for j=1:7;Count(1:5)=0;for k=1:N;i=1;while X(j,k)>P(i);i=i+1;end;Count(i)=Count(i)+1;end;C=[C Count];end;C
 C  =
 
    9.     10.    13.    9.     12.    6.     19.  
    32.    21.    15.    18.    22.    24.    20.  
    10.    4.     3.     12.    4.     9.     6.   
    37.    45.    47.    39.    44.    42.    38.  
    12.    20.    22.    22.    18.    19.    17.  
 
-->N=100;X=grand(7,N,'def');C=[];for j=1:7;Count(1:5)=0;for k=1:N;i=1;while X(j,k)>P(i);i=i+1;end;Count(i)=Count(i)+1;end;C=[C Count];end;C
 C  =
 
    14.    13.    18.    12.    12.    9.     13.  
    25.    27.    27.    23.    27.    18.    14.  
    4.     4.     3.     6.     10.    4.     2.   
    45.    38.    34.    40.    34.    45.    47.  
    12.    18.    18.    19.    17.    24.    24.  




More information about the users mailing list