PDA

View Full Version : [MATLAB] determinare appartenenza ad una soglia in un vettore - urgentissimo!!!


Lelelauu
22-02-2012, 20:39
Salve a tutti!
vorrei chiedervi consiglio su una parte di un programmino che devo sviluppare per la mia tesi, è urgente perchè i tempi stringono:
in pratica devo fare una simulazione montecarlo e mi sono bloccato nel momento in cui dopo aver trovato dei numeri casuali devo utilizzare questi per vedere in quale soglia sono finito su un vettore, mi spiego meglio;
ho 3 vettori composti da 8 valori che sono crescenti in quanto derivati da una somma cumulata; devo effettuare un numero N (mettiamo N=10) di simulazioni nelle quali vado prima a generare dei numeri casuali con mvnrnd(MU,SIGMA,N), ottengo quindi una matrice Nx3, poi devo prendere ognuno di questi valori generati su una riga e confrontarli con i 3 vettori nello stesso ordine in cui sono, ovvero 1°valore 1°vettore 2°valore 2°vettore 3°valore 3° vettore, essendo i valori dei vettori da 8 valori ordinati(sono delle soglie) mi serve sapere ognuno dei valori generati al di sotto di quale soglia sia, questo per ognuna delle righe della matrice Nx3. Io ho strutturato così ma poi mi sono bloccato:

sogliaa %vettori delle soglie, con numeri crescenti
sogliab
sogliac

R=mvnrnd(mu,sigma,10) %matrice Nx3
for i=1:10
for j=1:3
X=R(i,j)
%ora qui devo associare questo R a una delle soglie per poi esplicitarlo che mi servirà più avanti.

come posso fare?
vi ringrazio in anticipo se riuscirete ad aiutarmi!

Lelelauu
23-02-2012, 10:59
Vi prego se qualcuno ha dei suggerimenti si faccia avanti, sto rischiando seriamente di dover saltare sessione di laurea se non vado avanti con questa programmazione...:muro: :muro: :muro:

:help: :help: :help: :help: :help: :help: :help: :help: :help: :help:

__ZERO_UNO__
23-02-2012, 13:19
Se ho compreso bene una banale soluzione è:

per ogni vettore colonna di R
v = R(1:end, indice_colonna_che_voglio_confrontare);

e confronti ogni componenete del vettore v con il vettore delle soglie corrispondente le cui componenti devono essere in ordine non crescente, fermandoti quando trovi che v(i) >= soglia(k), memorizzando il valore della soglia o l'indice di essa nella stessa posizione del valore in R in una matrice o in un vettore colonna.

Lelelauu
23-02-2012, 13:38
non sono riuscito a ben capire il tuo suggerimento, magari pongo il problema in maniera più semplice per poi ampliarlo in un secondo momento:

ho questi 3 vettori soglia, crescenti:
sogliaa[1 2 3 4 5 6 7 8]
sogliab
sogliac

estraggo un vettore random con

R=mvnrnd(mu,sigma)%ottengo un vettore 1x3

ora devo confrontare il primo termine del vettore con la sogliaa, il secondo con la sogliab il terzo con la sogliac.
per confronto faccio un esempio: il primo termine è 0.5, quindi devo assegnare un valore(per esempio a), il secondo termine è 3.5, quindi devo assegnare valore d e così per il terzo.
questo per un vettore singolo,
invece io dovrò fare N estrazioni che mi daranno una matrice con N righe e ogni riga dovrò confrontarla con la soglia con il metodo sopra esposto.

__ZERO_UNO__
23-02-2012, 16:14
Al posto di fare confronti per righe ho suggerito di farlo per colonne.
Invece di fare,

confronto elemento R11 con vettore soglia1 e
confronto elemento R12 con vettore soglia2 e
confronto elemento R13 con vettore soglia3
[...]
così per ogni riga

confrontare l'elemento R11 con soglia1 poi
confrontare l'elemento R21 con soglia1 poi
confrontare l'elemento R31 con soglia1 poi
[...]

per ogni colonna di R e immagazzinare il valore della soglia minimo maggiore di Rij in una matrice M nella posizione Mij, cioè nella stessa posizione del valore confrontato. Visto che le soglie sono già in ordine crescente meglio fare i confronti partendo dal fondo dei vettori soglia. Se il risultato dei confronti ti serve una tantum puoi anche evitare di immagazzinare Mij, ma il codice diventa un pochino più complesso.
Questione di gusti credo, così è come preferisco io. :)