View Full Version : Aiuto Matlab
Mod disclaimer: lo so che è un software, ma è un software scientifico, per cui mi pareva il posto migliore questo... :p
Venendo al sodo...
Lo so che è una scemenza, ma non riesco proprio a capire come si faccia :muro:
Dunque, io ho una matrice nxm e voglio, all'interno di un ciclo for, dividerla in vettori. Praticamente gli dico, per i che va da 1 ad m creami tanti vettori P(i) prendendo gli elementi di ogni colonna. Ma come diavolo si mette l'indice al vettore???
Grazie :stordita:
gurutech
29-09-2005, 17:58
A=rand(3)
il vettore contenente solo la prima colonna è
A(:,1)
solo la seconda
A(:,2)
etc etc
senza cicli for.
no no, non mi sono spiegato... io devo fare così:
for i=1:size(A,2) % per i da 1 all'altezza della matrice
Press=P(i,:); % prende le varie righe e le inserisce in un vettore
a quel "Press" devo dargli l'indice, come faccio?
A creare Press1, Press2, etc, insomma...
gurutech
29-09-2005, 18:27
:wtf:
prechè ridividere il tutto?
metti press=A
e quando ti serve una riga di press, al posto di press(k) scrivi press(k,:)
:wtf:
prechè ridividere il tutto?
metti press=A
e quando ti serve una riga di press, al posto di press(k) scrivi press(k,: )
Perchè devo lavorarci parecchio! :p
Se ho tutti i vettori divisi sono molto comodo, se invece faccio come dici tu mi tocca usare tremila cicli for annidati e non ci si capisce più 'na mazza, inoltre il problema mi si ripresenta dopo perchè devo numerare anche i vari risultati delle operazioni per usarsi in seguito...
Deduco comunque che tu non lo sappia come si inserisce l'indice in un ciclo for ad un vettore sennò mi avresti risposto :D
Lucrezio
29-09-2005, 18:51
Io c'ho fatto un esame di recente... consiglio: prova con help Press
gurutech
29-09-2005, 18:57
Perchè devo lavorarci parecchio! :p
Deduco comunque che tu non lo sappia come si inserisce l'indice in un ciclo for ad un vettore sennò mi avresti risposto :D
per come la vedo io tu vuoi fare un array contenente degli array.
mentre in C et similia questo è tecnicamente possibile con i puntatori, AFAIK in matlab una struttura del genere è vista come una matrice, e perciò va richiamata con indici di riga e colonna.
per come la vedo io tu vuoi fare un array contenente degli array.
mentre in C et similia questo è tecnicamente possibile con i puntatori, AFAIK in matlab una struttura del genere è vista come una matrice, e perciò va richiamata con indici di riga e colonna.
Nooooo :muro: :D Non hai capito :p
Vabbè, adesso faccio altre prove, ma il fatto è che io ho bisogno... senti, vedila in un altro modo: io ho bisogno di dare un nome con un indice ad una matrice. Come diamine faccio?
Io c'ho fatto un esame di recente... consiglio: prova con help Press
Se c'hai fatto l'esame di recente non potevi dirmelo addirittura? :read: :D
Adesso cerco...
Non esiste il comando "press"... :mbe:
gurutech
29-09-2005, 19:03
'spetta ho appena detto una cazzata.
ho guardato nell'help di matlab e quello che ti serve sono i "Cell Arrays". per l'indice devi usare le graffe al posto delle tonde.
A=rand(5);
for i=1:5
P{i}=A(:,i);
end
>> P
P =
[5x1 double] [5x1 double] [5x1 double] [5x1 double] [5x1 double]
>> P{1}
ans =
0.9501
0.2311
0.6068
0.4860
0.8913
>>
Alleluia :yeah:
Grazie grazie grazie :smack:
gurutech
29-09-2005, 19:11
Grazie grazie grazie :smack:
:Puke:
se proprio vuoi ringraziarmi
http://www.gurutech.it/images/dollar.gif
oppure :gluglu:
Oh ma che schizzinoso :uh: :D
Visto che siete bravi vi faccio un'altra domanda :p
Devo fare dei grafici di tipo mesh, come faccio a farli comparire in finestre diverse invece che sulla stessa? O a farli comparire sovrapposti (il comando hold/hold off non pare funzionare con i mesh...)?
Come non detto, sono un somaro, l'hold funziona :D
Resta il problema che se non lo metto mi elimina l'ultimo invece che metterlo in una finestra nuova...
Fatto tutto :O
Attendete pure le prossime domande :D
Vi lascio la domandina intanto che ci lavoro, magari qualcuno mi dà un buon suggerimento :p
Io ho una funzione di tre variabili, espressa sotto forma di prodotto di matrici del tipo:
P=[1 V V^2]*[K]*[1 A A^2]'
Dove K è una 3x3 con i coefficienti.
Questa chiaramente è una superficie e fin qui tutto funziona.
Come faccio se voglio fissare un valore di P e tracciare la curva che risulta? Praticamente, come faccio a disegnare le varie curve a P=cost.?
Attendo speranzoso perchè non ne ho la più pallida idea :stordita:
gurutech
30-09-2005, 09:39
cioè devi trovare K in funzione di P ?
P.S. mi interessa fare l'erasmus in spagna, scrivimi a gurutech@gurutech.it che ti voglio chiedere qualche info
P.P.S. http://www.hwupgrade.it/forum/showthread.php?t=1026629
Nein, devo trovare, fissato P, il grafico tra V ed A.
Adesso ti scrivo ;)
Curve di livello?
http://www.mathworks.com/access/helpdesk/help/techdoc/ref/contour.html
Curve di livello?
http://www.mathworks.com/access/helpdesk/help/techdoc/ref/contour.html
Cerco di capire se è quello che mi può servire, ma intanto uno :smack: anche per te c'è :D
Dall'altro thread:
Beh, e qui si danno risposte a queste domande e al mio semplice problemino su come gestire una funzione con matlab nessuno ha ancora risposto?
Ma sei qui ancora a lamentarti? :D
Le curve di livello dovrebbero andare bene, si tratta solo di capire quale è la funzione da darle in pasto ;)
Dall'altro thread:
Ma sei qui ancora a lamentarti? :D
Le curve di livello dovrebbero andare bene, si tratta solo di capire quale è la funzione da darle in pasto ;)
Sì che mi lamento ancora :p
Le curve di livello vanno abbastanza bene.
Il problema è che se voglio ricavare la soluzione "degli incroci" lo posso fare solo per via grafica mentre se potessi avere l'espressione analitica sarei a posto.
Solo che ho fatto due conti a mano e non mi pare che sia possibile -almeno coi mezzi che conosco io- trasformare la funzione che ho f(x,y)-P=0 in una x=f(y)-P...
Il problema è che se voglio ricavare la soluzione "degli incroci" lo posso fare solo per via grafica mentre se potessi avere l'espressione analitica sarei a posto.
Degli incroci? :wtf:
Puoi essere un po' meno criptico? :D
Ovviamente in genere non puoi esplicitare una variabile, perchè le curve di livello di solito non sono funzioni degli assi cartesiani, per una x hai più y e viceversa.
Quello che ho capito è che hai una f(A,V) e devi trovare f(A,V) = P che è appunto una curva di livello (per definizione :D).
EDIT: forse ho capito. Se devi trovare ex. valore di A a V fissato tale che f(..)=P basta che sostituisci nell'espressione e gli fai risolvere l'equazione :D
Idem nel caso generale V(A) o A(V).
Poi usi le curve di livello all'unico scopo di visualizzare graficamente ;)
Eh, meno criptico... è che dovrei spiegarti mezza tesi per essere meno criptico :D
Provo a spiegarti meglio il problema...
Io ho una funzione P=f(A,V), o Z=f(X,Y) che dir si voglia. O meglio, ne ho varie e rappresentano la risposta di vari sensori.
Con questi sensori io leggo vari P e lo scopo è ricavare la coppia A,V corrispondente.
Chiaramente per ogni sensore ho infinite coppie che mi possono dare una determinata P, per cui mi servono almeno due letture diverse.
Il procedimento dovrebbe essere questo: leggo P1 e ricavo una curva (la curva di livello, insomma) e leggo P2 e ricavo un'altra curva.
Mettendo assieme queste due curve, i punti dove si intersecano rappresentano le coppie che mi possono dare quei risultati che ho trovato.
Per plottare queste curve, che poi dovrò mettere a sistema, dovrei poter esprimere, fissato P, A=f(V)-P, o in altri termini Y=f(X)-K. Sta tutto qui il problema: che ho sviluppato i vari termini dell'equazione e secondo me è impossibile separare le variabili. Ma oggi vado da un mio amico matematico e vediamo che mi dice... perchè mi pare, come dire, che l'aspetto matematico del problema sia stato un po' sottovalutato...
Con questi sensori io leggo vari P e lo scopo è ricavare la coppia A,V corrispondente.
Chiaramente per ogni sensore ho infinite coppie che mi possono dare una determinata P, per cui mi servono almeno due letture diverse.
Vedi che non ci vuole molto? ;)
Mi mancava appunto questo contesto, non sapevo che cosa dovevi intersecare e perchè.
Mettiamo che hai due funzioni f(x,y) e g(x,y), che danno P1 e P2. Quello che ti interessa è trovare la x,y corrispondente. Tutto si riduce a risolvere il sistema non lineare:
f(x,y) = P1
g(x,y) = P2
Che in genere può avere da 0 a infinite soluzioni; se te ne escono più di una puoi sempre ampliare il sistema aggiungendo misurazioni (più o meno come il metodo dei tre cerchi nell'individuare la posizione con il GPS).
Esistono vari metodi per risolvere questi sistemi numericamente (li sto studiando giusto ora :D) ma richiedono di fornire un'approssimazione iniziale, che può essere anche completamente sbagliata: magari (0,0) va sempre bene :D
Trovata la funzione:
http://www.mathworks.com/access/helpdesk/help/toolbox/optim/ug/fsolve.html
però non è proprio banale da usare, specie se sei digiuno di metodi iterativi :p
No, per niente banale... :mbe:
Beh adesso me la studio un pochino... ma secondo te posso dargli in pasto semplicemente le equazioni originarie dando dei P fissati?
Beh adesso me la studio un pochino... ma secondo te posso dargli in pasto semplicemente le equazioni originarie dando dei P fissati?
Penso di sì, se non sono troppo pesanti... le deve valutare ad ogni passo. Gli devi dare anche un punto di partenza (prova con l'origine, se non hai idea di dove siano le soluzioni).
Purtroppo le equazioni lineari sono delle brutte bestie, non è garantito il risultato :p
Penso di sì, se non sono troppo pesanti... le deve valutare ad ogni passo. Gli devi dare anche un punto di partenza (prova con l'origine, se non hai idea di dove siano le soluzioni).
Purtroppo le equazioni lineari sono delle brutte bestie, non è garantito il risultato :p
Beh ma cosa vuoi che siano, al massimo ho il prodotto tra due polinomi di terzo grado :fiufiu: :D
Goldrake_xyz
01-10-2005, 19:59
O.T.
Accipuffa, non riesco a scaricare i manuali *.pdf dal sito di matlab .. :muro:
Il download comincia bene, ma ad un tratto si sconnette e il file sull' HD
quando si tenta di aprirlo dice "documento corrotto impossibile aprirlo" :mad:
Il problema è del sito o del mio provvider ? :confused:
Thanks, e mi scuso con GPC x l' O.T.
Ciao :D
Thanks, e mi scuso con GPC x l' O.T.
Non c'è problema, sono 100€. :O
:sofico:
Goldrake_xyz
01-10-2005, 20:54
Non c'è problema, sono 100€. :O
:sofico:
:ops:
Ciao GPC :D
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.