Grafici funzioni matlab
1) disegnare il grafico di $f=1-(x^2-1)^2$ nell'intervallo $[-1.5,1.5]$
e il programma è:
n=300
h=1/100 %è il passo della partizione
x=zeros(1,n)
y=zeros(1,n)
x(1)=-1.5
y(1)=$1-(1.5^2-1)^2$
for i=2:300
x(i)=x(i-1)+h
y(i)=$1-(1-x(i)^2)^2$
end
plot(x,y)
2)disegnare il grafico di $sin(x)$ nell'intervallo $[-pi,pi]$
n=1e6
h=2*pi/n
x=[]
y=[]
for i=0:n
x=-pi+i*h
y=sin(x)
X=[X x]
Y=[Y y]end
line (X,Y)
non riesco a capire il perchè di quei comandi segnati di rosso, potreste aiutarmi?
e il programma è:
n=300
h=1/100 %è il passo della partizione
x=zeros(1,n)
y=zeros(1,n)
x(1)=-1.5
y(1)=$1-(1.5^2-1)^2$
for i=2:300
x(i)=x(i-1)+h
y(i)=$1-(1-x(i)^2)^2$
end
plot(x,y)
2)disegnare il grafico di $sin(x)$ nell'intervallo $[-pi,pi]$
n=1e6
h=2*pi/n
x=[]
y=[]
for i=0:n
x=-pi+i*h
y=sin(x)
X=[X x]
Y=[Y y]end
line (X,Y)
non riesco a capire il perchè di quei comandi segnati di rosso, potreste aiutarmi?
Risposte
Ciao!!
Cerco di spiegarmi, se non sono chiaro dillo pure (so di non essere molto chiaro)
es 1
n=300 sono i passi che sei disposto a fare; all'inizio diamo il valore -1.5 estremo sinistro dell'intervallo su cui vogliamo disegnare la funzione; poi il secondo valore sarà -1.5+h (perchè h è il passo) il terzo sarà uguale al secondo+h e così via; però vogliamo arrivare a valutare la nostra funzione fino a 1.5; quindi, dato che il nostro intervallo è ampio 3 dovremo fare in modo che $n*h=3$; questi valori su cui calcoliamo la funzione sono quelli che chiamerai x(i)
x=zeros(1,n)
y=zeros(1,n)
per disegnare la funzione con plot abbiamo bisogno del vettore x dei punti dove valutiamo la funzione e il vettore y che sono i valori assunti dalla funzione nei punti dove l'abbiamo calcolata; hanno quelle dimensioni perchè come cercavo di spiegare sopra abbiamo bisogno di fare n passi per coprire tutto l'intervallo [-1.5,1.5]
for i=2:300
x(i)=x(i-1)+h
per trovare il punto successivo in cui calcolare la funzione usi il precedente e aggiungi h (vedi quanto detto sopra); il ciclo parte da 2 proprio perchè per definire x(i) abbiamo bisogno di x(i-1) [se il ciclo partisse da i=1 dovresti calcolare x(1-1) cioè x(0), che non ha senso, soprattutto per matlab)
proprio per questo diamo prima di iniziare il ciclo i valori di x e y in 1;
se è tutto ok posso darti qualche consiglio per migliorare il primo programma, oppure più tardi ti posto qualcosa sul secondo; Se ho scritto cose troppo complicate o troppo ovvie dimmi pure!
Cerco di spiegarmi, se non sono chiaro dillo pure (so di non essere molto chiaro)
es 1
n=300 sono i passi che sei disposto a fare; all'inizio diamo il valore -1.5 estremo sinistro dell'intervallo su cui vogliamo disegnare la funzione; poi il secondo valore sarà -1.5+h (perchè h è il passo) il terzo sarà uguale al secondo+h e così via; però vogliamo arrivare a valutare la nostra funzione fino a 1.5; quindi, dato che il nostro intervallo è ampio 3 dovremo fare in modo che $n*h=3$; questi valori su cui calcoliamo la funzione sono quelli che chiamerai x(i)
x=zeros(1,n)
y=zeros(1,n)
per disegnare la funzione con plot abbiamo bisogno del vettore x dei punti dove valutiamo la funzione e il vettore y che sono i valori assunti dalla funzione nei punti dove l'abbiamo calcolata; hanno quelle dimensioni perchè come cercavo di spiegare sopra abbiamo bisogno di fare n passi per coprire tutto l'intervallo [-1.5,1.5]
for i=2:300
x(i)=x(i-1)+h
per trovare il punto successivo in cui calcolare la funzione usi il precedente e aggiungi h (vedi quanto detto sopra); il ciclo parte da 2 proprio perchè per definire x(i) abbiamo bisogno di x(i-1) [se il ciclo partisse da i=1 dovresti calcolare x(1-1) cioè x(0), che non ha senso, soprattutto per matlab)
proprio per questo diamo prima di iniziare il ciclo i valori di x e y in 1;
se è tutto ok posso darti qualche consiglio per migliorare il primo programma, oppure più tardi ti posto qualcosa sul secondo; Se ho scritto cose troppo complicate o troppo ovvie dimmi pure!
grazie mille, sei gentilissimo! per l'es 1 tutto ok per il 2 puoi dirmi qualcosa?
per l'es 2
il valore n e la definizione dei tuoi x(i) all'interno del ciclo hanno lo stesso significato che avevano nell'esercizio 1 (unica nota: $1e6=1*10^6$)
qui fa partire il ciclo da zero perchè non salva i risultati in un vettore quindi non ha il problema di definire x(0);
però poi utilizza X=[X x] Y=[Y y] che non capisco cosa vogliano dire... devo ammettere che non conosco molto bene la funzione line, però sicuramente quei X=[X x] Y=[Y y] sono sbagliati;
se vuoi possiamo fare un altro algoritmo, usando ancora plot!
il valore n e la definizione dei tuoi x(i) all'interno del ciclo hanno lo stesso significato che avevano nell'esercizio 1 (unica nota: $1e6=1*10^6$)
qui fa partire il ciclo da zero perchè non salva i risultati in un vettore quindi non ha il problema di definire x(0);
però poi utilizza X=[X x] Y=[Y y] che non capisco cosa vogliano dire... devo ammettere che non conosco molto bene la funzione line, però sicuramente quei X=[X x] Y=[Y y] sono sbagliati;
se vuoi possiamo fare un altro algoritmo, usando ancora plot!
non lo so perchè sono esercizi svolti che ho sulle dispense e non ci si capisce nulla da quanto sono fatte male
ok. mi sono dedicato al tuo problema, e ho capito... c'è un errorino e sono anche convinto che chi ha scritto il tuo algoritmo o ha un mega computer oppure non ha mai fatto questo programma;
Allora io ti scrivo l'algoritmo che funziona
ora cerchiamo di capire perchè: prima di tutto cerchiamo di capire cosa fa la funzione line;
prendiamo il vettore $(x_1 x_2)$ e il vettore $(y_1 y_2)$ come sempre il primo prende valori sull'asse reale e il secondo restituisce il valore della funzione (in questo caso sinx) calcolato nel corrispondente valore x_i;la funzione line(x,y) allora traccia la retta(meglio il segmento) passante per i punti $(x_1,y_1) e (x_2,y_2)$;
se abbiamo un vettore più lungo farà questo lavoro prendendo 2 punti per volta.
Ora torniamo all'algoritmo: definiamo X eY due spazi di memoria (che poi useremo come vettori)
poi facciamo il ciclo for calcolando il primo valore di x, il corrispondente y e gli diciamo di mettere questi due valori nelle memorie di X e Y;
poi il ciclo ri-inizia, calcoliamo un nuovo x e il corrispondente y e li salviamo in una nuova colonna dei corrispondenti vettori X,Y, e il ciclo prosegue... alla fine disegnamo tutti i segmenti ed esce un'approssimazione lineare del sin sui piccoli intervalli di ampiezza h.
Allora io ti scrivo l'algoritmo che funziona
n=1e2 %ho usato e2 perchè con e6 mi esplodeva il computer
h=2*pi/n
X=[] %attenzione sono maiuscole
Y=[] %attenzione sono maiuscole
for i=0:n
x=-pi+i*h
y=sin(x)
X=[X x]
Y=[Y y]
end
line (X,Y)
ora cerchiamo di capire perchè: prima di tutto cerchiamo di capire cosa fa la funzione line;
prendiamo il vettore $(x_1 x_2)$ e il vettore $(y_1 y_2)$ come sempre il primo prende valori sull'asse reale e il secondo restituisce il valore della funzione (in questo caso sinx) calcolato nel corrispondente valore x_i;la funzione line(x,y) allora traccia la retta(meglio il segmento) passante per i punti $(x_1,y_1) e (x_2,y_2)$;
se abbiamo un vettore più lungo farà questo lavoro prendendo 2 punti per volta.
Ora torniamo all'algoritmo: definiamo X eY due spazi di memoria (che poi useremo come vettori)
poi facciamo il ciclo for calcolando il primo valore di x, il corrispondente y e gli diciamo di mettere questi due valori nelle memorie di X e Y;
poi il ciclo ri-inizia, calcoliamo un nuovo x e il corrispondente y e li salviamo in una nuova colonna dei corrispondenti vettori X,Y, e il ciclo prosegue... alla fine disegnamo tutti i segmenti ed esce un'approssimazione lineare del sin sui piccoli intervalli di ampiezza h.
va bene ora grazie 1000
