Aiuto su Riempimento Matrice

di il
3 risposte

Aiuto su Riempimento Matrice

Salve a tutti, sto facendo delle simulazioni monte carlo in ambito finanziario. Vi spiego cosa ho fatto. Ho simulato per 100 volte l'andamento di un titolo di borsa e l'ho messo in una matrice 1000x100 per immagazzinare tutti i dati (1000 sono gli istanti di tempo).

Adesso di questa matrice 1000x100 io vorrei che: SE I VALORI NON SUPERANO UNA CERTA SOGLIA (mettiamo caso 3), allora tutti i numeri di tutta la colonna (sto ragionando in termini di colonna) devono essere=0.

Mentre, SE ANCHE UNA SOLA VOLTA SUPERANO UNA CERTA SOGLIA allora la matrice deve memorizzare normalmente tutti i dati della simulazione. adesso io ho dato un comando che però è sbagliato:

S(S<BARR) = [0] dove S è una singola simulazione dove ho 1000 elementi

che andrò ad immagazzinare di volta in volta (per colonna) nella Matrice

STORE(1000,100).

Adesso come faccio ad impostare una cosa del genere sarebbe: "il ragionamento sarebbe sulla vettore S anche se una sola volta i valori contenuti in S>SOGLIA immagazzina tutti i dati, altrimenti scrivi zero".

Vi ringrazio ragazzi, buona giornata.

3 Risposte

  • Re: Aiuto su Riempimento Matrice

    Puoi "lavorare direttamente su tutta la matrice in questo modo:

    [*] identifica gli indici dei valori inferiori alla soglia
    [*] usa la funzione "any" per identificare le colonne nelle quali c'è almeno un valore inferiore alla soglia
    [*] setta i valori delle colonne identificate al punto precedente a 0
    
    % Define the threshold
    BARR=3;
    % Create ax example matrix
    S=randi([0 100],10,5)
    % Find the indices of the values less than the threshold in the matrix
    idx=S<BARR
    % Find the columns in which there is at least a value less than the threshold
    to_del=any(idx,1)
    % Make a copy of the original matrix
    S1=S
    % Set the values of the columns containing at least a value less than the threshold to 0
    S1(:,to_del)=0
    
    O, se preferisci, in una sola riga:
    
    S1=S;
    S1(:,any(S<BARR,1))=0
    
    Ad esempio, partendo dalla matrice:
    
    S=[     7   100    51    76    11
        79    70     9    28    32
         0    10    29    96    77
        40    38     1    45    13
        78    72    83    79    31
        33    57    54    99    59
        26     7    56    60    51
         6    99    58    45    64
        94     7    11     0    73
        29    61    78    46    78
    ]
    
    Settando la soglia:
    
    BARR=3
    
    si ottiene:
    
    S1=[     0   100     0     0    11
         0    70     0     0    32
         0    10     0     0    77
         0    38     0     0    13
         0    72     0     0    31
         0    57     0     0    59
         0     7     0     0    51
         0    99     0     0    64
         0     7     0     0    73
         0    61     0     0    78
    ]
    
  • Re: Aiuto su Riempimento Matrice

    Ciao grazie dell'aiuto. Allora ho seguito ciò che mi dicevi. Ciò che cercavo di fare io però.. non era "se anche uno dei valori contenuti nella colonna è <BARR allora scrivi zero in tutta la colonna",

    io cercavo il ragionamento inverso cioè: "se anche uno dei valori > BARR allora lascia i valori originali della matrice"

    Comunque in sostanza ho seguito ciò che hai fatto usando il minore al posto del maggiore e ho cambiato da any ad all, avendo abbastanza fortuna perchè non sapevo se esistesse o meno un comando all
    %Define the threshold
    BARR=95;
    % Create ax example matrix
    S=randi([0 100],10,5)
    % Find the indices of the values less than the threshold in the matrix
    idx=S<BARR
    % Find the columns in which there is at least a value less than the threshold
    to_del=all(idx,1)
    % Make a copy of the original matrix
    S1=S
    % Set the values of the columns containing at least a value less than the threshold to 0
    S1(:,to_del)=0
    e come output ottengo
    S1 =
    
        50    72    36    11    67
        61    35    45    39    50
        82    52    39    59    22
        53    56    78    46    57
        20    15    74     5    12
        45    56    43    23    67
        43    70    70    84    60
        97    43    95     1     5
        62    84    79    87     5
        70    73    71     7    15
    
    
    S1 =
    
        50     0    36     0     0
        61     0    45     0     0
        82     0    39     0     0
        53     0    78     0     0
        20     0    74     0     0
        45     0    43     0     0
        43     0    70     0     0
        97     0    95     0     0
        62     0    79     0     0
        70     0    71     0     0
    vedi nel mio caso ci sono 3 colonne che contengono dei numeri che "NON SUPERANO MAI LA BARR=95.

    Così dovrebbe essere corretto penso, cosa ne pensi? ciao
  • Re: Aiuto su Riempimento Matrice

    Evidentemente non avevo compreso la domanda.
    Giudica tu, se il risultato è corretto o meno; se hai dei dubbi, prova a definire "manualmente" alcune matrici con combinazioni "particolari" di valori e verifica se i tuo codice "funziona" in tutti i casi.
Devi accedere o registrarti per scrivere nel forum
3 risposte