Grafico MATLAB

stelladinatale1
Devo rappresentare la seguente funzione in MATLAB ma non ci riesco:
$$f(x,y) = 100*(y-x^2)^2+(1-x)^2$$
Ho provato con i seguenti comandi nella command window:

[x,y] = meshgrid(-2:.1:2,-3:.1:3);
z = 100*(y.-x.^2)^2+(1-x.)^2;
mesh(z);

ma mi dice:
??? z = 100*(y.-x.^2)^2+(1-x.)^2;
|
Error: Unexpected MATLAB operator.



invece facendo copia incolla da un codice trovato su internet per rappresentare un'altra funzione riesco a fare il grafico. Il codice che funziona è il seguente:
[x,y] = meshgrid(-2:.1:2,-3:.1:3);
z = exp(-x.^2 - y.^2);
mesh(z);

Forse il problema è nella meshgrid che non è adatta alla mia funzione?
Grazie a tutti

Risposte
stelladinatale1
ok, sicuramente hai ragione sul fatto che sto imparando matlab troppo in fretta ma purtroppo in questo periodo non posso fare diversamente.
Grazie per l'aiuto.

Gi81
Nel senso che, secondo me, stai cercando di imparare Matlab troppo in fretta e con poca attenzione.
Il comando mesh non fornisce il grafico 3d della funzione, ma un'altra cosa.
mesh(z) crea una prospettiva tridimensionale dei dati della matrice z.

Se vuoi fare il grafico 3d devi usare il comando plot3(x,y,z).
Per info, leggi qui: http://www.dsi.unifi.it/users/marino/Am ... ab-UD6.pdf
(soprattutto le ultime slide)

stelladinatale1
esatto, il problema è proprio questo.
Il minimo di quella funzione in realtà è in (1,1) mentre dal grafico che fa MATLAB sembra stare in (100,100), quindi mi chiedevo c'è un comando per cambiare la scala degli assi e far si che il minimo venga giusto?

ps. posso sapere perché ti cadono le braccia?

Gi81

Se il grafico a cui ti riferisci è questo, mi cadono le braccia.
Come fai a dire che "si vede che il minimo c'è in corrispondenza di (100,100)"? ma dai... :-)

stelladinatale1
Nel senso che sul grafico che fa MATLAB ci sono delle tacche sia sull'asse x, sia sull'asse y che sull'asse z.
E siccome quella funzione è una specie di valle è facile individuare il minimo (a occhio) che sta in x=100, y=100

Gi81
"stelladinatale":
l'ho appena rifatto e il punto di minimo mi viene in (100, 100)
Scusa, ma in che senso "il punto di minimo ti viene in (100,100)"? Lo vedi ad occhio sul grafico, l'hai calcolato tu a mano, l'hai calcolato tu con Matlab?...

stelladinatale1
l'ho fatto con i seguenti comandi:


[x,y] = meshgrid(-10:.1:10,-10:.1:10);
z = 100*(y-x.^2).^2+(1-x).^2;
mesh(z);

l'ho appena rifatto e il punto di minimo mi viene in (100, 100) per questo penso che è come se i valori sull'asse delle x e sull'asse delle y fossero moltiplicati per 100.

Gi81
Ma è impossibile: $-2<=x<=2$ e $-3<=y<=3$; quindi non ci può essere il punto di coordinate ${(x=100),(y=100):}$

stelladinatale1
No, no, non volevo evidenziarlo. Siccome facendo il grafico il punto di minimo mi è venuto nel punto (100,100) (quindi penso abbia usato delle coordinate sfalsate) vorrei solo che nel grafico il punto di minimo corrispondesse effettivamente al punto (1,1).
Ps. Grazie per l'attenzione che mi stai dedicando

Gi81
Beh, ora punto_di_minimo ti dà le coordinate del punto di minimo assoluto (dovrebbe essere [1,1]).
Ma tu volevi un'altra cosa, cioè evidenziare il punto di minimo sul grafico. Non so bene come si potrebbe fare.

Più che mettere un'etichetta in cui si scrive "il punto di minimo è [1,1]", non saprei.
Tra l'altro, evidenziare in che senso? Colorare di un altro colore?

stelladinatale1
Ciao, grazie per la risposta, però non ho capito bene cosa devo fare.
Io scrivo nel command window:
I=z==min(min(z));
punto_di_minimo=[x(I),y(I)];

e poi?

Gi81
Io farei così:
I=z==(min(min(z)); 
punto_di_minimo=[x(I),y(I)];
 

stelladinatale1
Si, grazie, effettivamente pensavo che il punto andasse sulle variabili.

Ora aggiungo un'altra domanda, come faccio a fare il grafico in modo tale che si capisca che (1,1) è il minimo della funzione? Cioè che parametri devo mettere all'interno di meshgrid?
perché ho provato in vari modi ma il grafico penso lo faccia in scala (il minimo per esempio sembra stare in (100,100)).


Ps. L'ho messa in questa sezione perché ho visto che spesso si fanno domande su latex e quindi per matlab mi sembra la stessa cosa.
Se pensate ci sia una sezione più adeguata spostatela pure...

Gi81
L'errore è quando scrivi
z = 100*(y.-x.^2)^2+(1-x.)^2;

Stai mettendo i punti a caso (forse non hai capito bene come funziona)
Prova a riscrivere il tutto così:
z = 100*(y-x.^2).^2+(1-x).^2;


PS: che senso ha mettere questo thread in "Generale"?

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.