Sommatoria in C++!!!
potreste dirmi come si fa a scrivere un programma che faccia una sommatoria???
ad esempio mi servirebbe scrivere la sommatoria per n che va da o ad infinito di $((-1)^n*x^(2n+1))/((2n+1)!)$
che serve per calcolare il seno di un angolo.
vi ringrazio
ad esempio mi servirebbe scrivere la sommatoria per n che va da o ad infinito di $((-1)^n*x^(2n+1))/((2n+1)!)$
che serve per calcolare il seno di un angolo.
vi ringrazio
Risposte
che intendi per infinito?
un ciclo deve cmq fermarsi prima o poi, senno' il programma non termina oppure finisce la memoria del calcolatore.
un ciclo deve cmq fermarsi prima o poi, senno' il programma non termina oppure finisce la memoria del calcolatore.
penso che intende fissare una precisione... quindi quando non vale più questa precisione il ciclo si dovrebbe fermare
In pseudocodice
for (n=0;$f(n)-f(n-1)
{
...calcolo...
if (n=max) break;
}
Dove $x$ rappresenta il livello di precisione desiderato e $max$ il numero massimo di iterazioni che si vogliono consentire al programma, per evitare che si vada oltre la capacità del tipo di variabile considerata.
for (n=0;$f(n)-f(n-1)
...calcolo...
if (n=max) break;
}
Dove $x$ rappresenta il livello di precisione desiderato e $max$ il numero massimo di iterazioni che si vogliono consentire al programma, per evitare che si vada oltre la capacità del tipo di variabile considerata.
scusatemi non ho formulato bene la domanda la condizione fino alla condizione di cheguevilla ero arrivato. e' proprio il calcolo che non riesco ad esprimere(della formula sopra)!!!
E' semplicemente
con fact una funzione che devi scrivere per il fattoriale.
somma+=(pow(-1,n)*pow(x,2*n +1))/fact(2*n+1)
con fact una funzione che devi scrivere per il fattoriale.
giusto io pensavo di farlo senza usare le funzioni, ma verrebbe un codice molto lungo...
non esiste una funzione che fa il fattoriale?lo devo fare manualmente????
inolte mi serve math.h????
non esiste una funzione che fa il fattoriale?lo devo fare manualmente????
inolte mi serve math.h????
Si', ti serve math.h per pow. In math.h non c'e' una funzione per il fattoriale, ma ci metti due minuti a scriverla.
PS: per velocizzare un minimo, al posto di pow(-1,n) , dopo aver introdotto una variabile m=-1, scrivi m*m.
PS: per velocizzare un minimo, al posto di pow(-1,n) , dopo aver introdotto una variabile m=-1, scrivi m*m.
ok grazie.. il Ps non l'ho capito
se dichiaro m=-1 quando faccio m*m non viene 1???
se dichiaro m=-1 quando faccio m*m non viene 1???
Comunque, intendevo che devi scrivere m=m*(-1) e usare m al posto di pow(-1,n). Per n=0, tu avrai m=(-1)*(-1)=(-1)^0=1, per n=1, m=1*(-1)=(-1)^1=-1 etc.
Pow e' abbastanza lenta, quindi ti conviene fare cosi'.
Pow e' abbastanza lenta, quindi ti conviene fare cosi'.
for(i=1;i<=n;i++) m=m*m; fatt=1; n=0; somma=1; sommaprec=0; for(n=0;(somma-sommaprec)<prec;n++) { for(i=(2*n+1);i>0;i--) fatt=fatt*i; sommaprec=somma; somma=(m*pow(x,2*n+1))/(fatt); n++; }
raga dove sbaglio???
Ci sono vari punti dove sbagli. C'e' un for di troppo..
Ci si mette prima a scrivere il codice corretto, percio'
Per prec intendi sommaprec o un'altra variabili? Ci sono ovviamente varie ottimizzazioni che si possono fare.
Ci si mette prima a scrivere il codice corretto, percio'
somma=1; sommaprec=0; m=-1; for(int n=0;(somma-sommaprec)<prec && n<max;n++){ fatt=1; for(int i=(2*k+1);i>0;i--) fatt*=fatt*i; sommaprec=somma; m=-1*m; somma+=(m*pow(x,2*n+1))/(fatt); }
Per prec intendi sommaprec o un'altra variabili? Ci sono ovviamente varie ottimizzazioni che si possono fare.
per prec intendo la precisione...
Sostituisci 2*n+1 al posto di 2*k+1, e poi fatt*=i;
si adesso il programma gira... ke valore devo dare a max??? considerando che sto usando il tipo float e quali migliorie si potrebbero apportare? grazie per l'aiuto.
Ok, allora a posto. Il codice itera max volte oppure esce quando la f(n)-f(n-1) e' minore della precisione voluta.
Se hai bisogno di un codice piu' veloce, ottimizza il calcolo dei fattoriali.
Se hai bisogno di un codice piu' veloce, ottimizza il calcolo dei fattoriali.
mi sbagliavo... il programma non funziona correttamente.
praticamente il for non viene eseguito perchè il valore di somma rimane sempre 1
praticamente il for non viene eseguito perchè il valore di somma rimane sempre 1
chiedo scusa per gli innumerevoli post. ora ho risolto. c'era solo un problema nel codice di tom.
il for non veniva eseguito perchè (somma-sommaprec)
ho corretto con il > e adesso gira.
grazie per l'aiuto.
il for non veniva eseguito perchè (somma-sommaprec)
grazie per l'aiuto.
come faccio a fare $-1^(n-1)$???? con pow mi da errore xke n è dichiarata int. ho provato a convertire ma niente ...
"p4ngm4n":
chiedo scusa per gli innumerevoli post. ora ho risolto. c'era solo un problema nel codice di tom.
il for non veniva eseguito perchè (somma-sommaprec)ho corretto con il > e adesso gira.
grazie per l'aiuto.
Quello era il tuo codice

Il (-1)^(n) è risolto dal discorso di prima sulla m; poi non ho capito perché ora vuoi calcolare (-1)^(n-1).
mi serve per un altro algoritmo...