Grafico MATLAB
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
$$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
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.
Grazie per l'aiuto.
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)
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)
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?
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?

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...

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
E siccome quella funzione è una specie di valle è facile individuare il minimo (a occhio) che sta in x=100, y=100
"stelladinatale":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?...
l'ho appena rifatto e il punto di minimo mi viene in (100, 100)
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.
[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.
Ma è impossibile: $-2<=x<=2$ e $-3<=y<=3$; quindi non ci può essere il punto di coordinate ${(x=100),(y=100):}$
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
Ps. Grazie per l'attenzione che mi stai dedicando
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?
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?
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?
Io scrivo nel command window:
I=z==min(min(z));
punto_di_minimo=[x(I),y(I)];
e poi?
Io farei così:
I=z==(min(min(z)); punto_di_minimo=[x(I),y(I)];
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...
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...
L'errore è quando scrivi
Stai mettendo i punti a caso (forse non hai capito bene come funziona)
Prova a riscrivere il tutto così:
PS: che senso ha mettere questo thread in "Generale"?
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"?