MATLAB - integrale definito
Si scrivano le istruzioni minime direttamente dal prompt dei comandi di matlab per calcolare l'integrale definito della funzoine $xsin(x)$ nell'intervallo compreso tra $0$ e $2pi$ , si consideri un passo pari a $1/1000$ dell'intervallo considerato e si utilizzi il metodo per approssimazione dei trapezzi.
so solo farne una parte.
x=[0:pi/500:2*pi];
a=x.*sin(x);
mi manca l'ultima istruzione, non so come realizzarla senza usare una sommatoria, in quando non mi si chiede un m-file (una function) ma direttamente dal promt.
grazie
so solo farne una parte.
x=[0:pi/500:2*pi];
a=x.*sin(x);
mi manca l'ultima istruzione, non so come realizzarla senza usare una sommatoria, in quando non mi si chiede un m-file (una function) ma direttamente dal promt.
grazie
Risposte
devi usare la formula dei trapezi composita perchè hai tanti nodi(li chiamiamo $x_0,x_1,...,x_n$
$Tr(0,2*pi)=h*(f(x_0)+2f(x_1)+....+2f(x_(n-1))+f(x_n))/2=h*(f(x_0)/2+f(x_1)+f(x_2)+...+f(x_(n-1))+f(x_n)/2)$
ma nel nostro caso agli estremi vale 0, quindi ti basterà scrivere:
x=[0:pi/500:2*pi];
(pi/500)*sum(x.*sin(x))
$Tr(0,2*pi)=h*(f(x_0)+2f(x_1)+....+2f(x_(n-1))+f(x_n))/2=h*(f(x_0)/2+f(x_1)+f(x_2)+...+f(x_(n-1))+f(x_n)/2)$
ma nel nostro caso agli estremi vale 0, quindi ti basterà scrivere:
x=[0:pi/500:2*pi];
(pi/500)*sum(x.*sin(x))
da quanto ho capito,
facendo
(pi/500)*sum(x.*sin(x))
prendo con
sum(x.*sin(x))
il valore del massimo ogni volta, lo moltiplichi per l'intervallo così da ottenere l'area
però se ho ad esempio
$x^2+1$ da calcolare tra 1 e 2, mi viene sfasato leggermente, perchè cosa devo togliere?
>> (pi/500)*sum(x.^2+1)
ans =
3.3505
ho provato così ma non so se funziona bene:
>> x=[1:pi/500:2];
>> y=(x.^2+1)*pi/500;
>> I=(2*sum(y)-y(1)-y(lenght(y)))/2
è giusto?
grazie mille
facendo
(pi/500)*sum(x.*sin(x))
prendo con
sum(x.*sin(x))
il valore del massimo ogni volta, lo moltiplichi per l'intervallo così da ottenere l'area
però se ho ad esempio
$x^2+1$ da calcolare tra 1 e 2, mi viene sfasato leggermente, perchè cosa devo togliere?
>> (pi/500)*sum(x.^2+1)
ans =
3.3505
ho provato così ma non so se funziona bene:
>> x=[1:pi/500:2];
>> y=(x.^2+1)*pi/500;
>> I=(2*sum(y)-y(1)-y(lenght(y)))/2
è giusto?
grazie mille
le ultime righe mi pare siano giuste, forse un poco dispendiose... per esempio il prodotto per pi/500 potresti farlo una volta sola quando scrivi I=...
Attenzione:
1_con sum(x.*sin(x)) non prendi il massimo ma fai la somma delle valutazioni delle funzioni nei punti;(analogamente per sum(x.^2+1);
2_il rimedio di togliere le valutazioni in eccesso nell'integrale finale mi piace, però length devi scriverlo con th se no ti dà errore
non sono sicuro di essermi spiegato bene!fammi sapere
Attenzione:
1_con sum(x.*sin(x)) non prendi il massimo ma fai la somma delle valutazioni delle funzioni nei punti;(analogamente per sum(x.^2+1);
2_il rimedio di togliere le valutazioni in eccesso nell'integrale finale mi piace, però length devi scriverlo con th se no ti dà errore
non sono sicuro di essermi spiegato bene!fammi sapere
si è tutto chiaro, in pratica io ho in y il vettore con alcuni punti con il passo deciso da me. Con sum faccio la somma di tutte queste valutazioni, che poi vado a moltiplicare per la larghezza dell'intervallo così da ottenere l'area totale.
ho corretto il codice
>> x=[1:pi/500:2];
>> y=(x.^2+1);
>> I=(2*sum(y)-y(1)-y(length(y)))*pi/(2*500)
ho modificato l'ultima riga spostando il pi/500 e ho riscritto bene il length
ora funziona con approssimando la seconda o la terza cirfra dopo la virgola.
Ora è tutto chiaro, nel caso precedente era più semplice senza intervalli iniziali perchè bastava fare sum per il passo.
Grazie mille.
ho corretto il codice
>> x=[1:pi/500:2];
>> y=(x.^2+1);
>> I=(2*sum(y)-y(1)-y(length(y)))*pi/(2*500)
ho modificato l'ultima riga spostando il pi/500 e ho riscritto bene il length
ora funziona con approssimando la seconda o la terza cirfra dopo la virgola.
Ora è tutto chiaro, nel caso precedente era più semplice senza intervalli iniziali perchè bastava fare sum per il passo.
Grazie mille.
mi permetto di aggiungere un'ultima cosa che ieri mi sono dimenticato... se rimpicciolisci il passo viene meglio: prova usare 1/500 invece di pi/500 viene già molto meglio!
vero, con 1/1000 mi viene perfetto
grazie
grazie
