Entra

View Full Version : Aiuto Matlab


gpc
29-09-2005, 17:40
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.

gpc
29-09-2005, 18:12
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,:)

gpc
29-09-2005, 18:37
: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.

gpc
29-09-2005, 19:00
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?

gpc
29-09-2005, 19:01
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...

gpc
29-09-2005, 19:02
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

>>

gpc
29-09-2005, 19:04
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:

gpc
29-09-2005, 19:43
Oh ma che schizzinoso :uh: :D

gpc
29-09-2005, 20:50
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...)?

gpc
29-09-2005, 20:52
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...

gpc
29-09-2005, 22:22
Fatto tutto :O
Attendete pure le prossime domande :D

gpc
30-09-2005, 09:32
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

gpc
30-09-2005, 10:28
Nein, devo trovare, fissato P, il grafico tra V ed A.
Adesso ti scrivo ;)

checcot
30-09-2005, 15:55
Curve di livello?

http://www.mathworks.com/access/helpdesk/help/techdoc/ref/contour.html

gpc
30-09-2005, 16:04
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

Banus
30-09-2005, 20:58
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 ;)

gpc
30-09-2005, 22:48
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...

Banus
01-10-2005, 06:49
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 ;)

gpc
01-10-2005, 08:45
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...

Banus
01-10-2005, 09:38
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

gpc
01-10-2005, 09:53
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?

Banus
01-10-2005, 10:05
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

gpc
01-10-2005, 10:31
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

gpc
01-10-2005, 20:28
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