Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - metodo di Newton
Forum - C/C++ - metodo di Newton

Avatar
stella.p (Normal User)
Newbie


Messaggi: 11
Iscritto: 31/10/2009

Segnala al moderatore
Postato alle 13:37
Domenica, 10/01/2010
Ciao a tutti, ho un problema con QUESTO codice: non riesco ad inserire le parti della traccia del codice scritte in maiuscolo.. Spero che qualcuno mi possa dare una mano!! Grazie mille a tutti..
Codice sorgente - presumibilmente C

  1. Scrivere un programma C++ che realizza il metodo di Newton - USANDO APPROSSIMAZIONI ALLE DIFFERENZE CENTRALI CON PASSO 1.e-3 DEI VALORI DELLE DERIVATE
  2. - e utilizzarlo per approssimare le radici dell' equazione (x^2)-2 con tolleranza 1.e-6.
  3. LE VARIABILI DEVONO ESSERE SALVATE IN DOPPIA PRECISIONE IN MODO CHE LA PROCEDURA SIA SUFFICIENTEMENTE STABILE.
  4.  
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <math.h>
  8.  
  9. // prototipi funzioni
  10. double newton(double);
  11. double f(double);
  12. double derivata(double);
  13. double tg_x_axis(double);
  14.  
  15. main ()
  16. {
  17.         double x,newx,errore,eps;
  18.         int counter;
  19.        
  20.         printf("\n********** QUESTO PROGRAMMA CALCOLA LA RADICE DI x^2-2=0 *********");
  21.         printf("\n\n\n");
  22.        
  23.         printf("\n\nInserire il valore del punto iniziale,");
  24.         printf("\n\n                 x= ");
  25.         scanf("%lf",&x);
  26.        
  27.         printf("\n\nInserire la tolleranza: ");
  28.         scanf("%f",&eps);
  29.        
  30.         counter=0;
  31.         do {
  32.             newx=tg_x_axis(x);
  33.             counter++;
  34.             errore=fabs(x-newx);
  35.             x=newx;
  36.         }
  37.         while (errore>eps&&counter<100);
  38.         printf("\n\nLa radice dell'equazione e':  %f",newx);
  39.  
  40.         system("PAUSE");return 0;
  41. }
  42.  
  43. // funzioni
  44.  
  45. double f(double x)
  46. {
  47.         double y;
  48.         y=pow(x,2)-2;
  49.         return y;
  50. }
  51.  
  52. double derivata(double x)
  53. {
  54.         double y;
  55.         y=2*x;
  56.         return y;
  57. }
  58.  
  59. double tg_x_axis(double x)
  60. {
  61.         double nuovox;
  62.         nuovox=x-(f(x)/derivata(x));
  63.         return nuovox;
  64. }


PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 17:17
Domenica, 10/01/2010
Il programma a mio avviso è giusto. :k:
Ggli unici "difetti" che ho trovato sono i seguenti:
...
scanf("%f",&eps);
...
invece di scanf("%lf",&eps);
E "return 0;" alla fine , con l' intestazione "main ()" all' inizio.  

Per quanto riguarda la prima parte:
- USANDO APPROSSIMAZIONI ALLE DIFFERENZE CENTRALI CON PASSO 1.e-3 DEI VALORI DELLE DERIVATE-

Secondo me è l' errore deve essere impostato a 1.e-3.

Per la seconda parte:

LE VARIABILI DEVONO ESSERE SALVATE IN DOPPIA PRECISIONE IN MODO CHE LA PROCEDURA SIA SUFFICIENTEMENTE STABILE.

Nel programma le variabili sono già double.

Ultima modifica effettuata da Poggi Marco il 10/01/2010 alle 18:38
PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 19:19
Domenica, 10/01/2010
:_doubt: ...Ripensandoci, la prima affermazione può riferirsi alla funzione che calcola la derivata.
Secondo il mio perere, essa potrebbe sessere così:

double derivata(double x)
{
         double y;
         y=(f(x)-f(x-1e-3))/1e-3;
         return y;
}


PM Quote
Avatar
stella.p (Normal User)
Newbie


Messaggi: 11
Iscritto: 31/10/2009

Segnala al moderatore
Postato alle 22:08
Domenica, 10/01/2010
grazie mille, mi sei stato di grande aiuto.. ;)

PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 22:54
Domenica, 10/01/2010
Di nulla! :)

PM Quote