Oppure

Loading
10/01/10 12:37
stella.p
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..
Scrivere un programma C++ che realizza il metodo di Newton - USANDO APPROSSIMAZIONI ALLE DIFFERENZE CENTRALI CON PASSO 1.e-3 DEI VALORI DELLE DERIVATE
- e utilizzarlo per approssimare le radici dell' equazione (x^2)-2 con tolleranza 1.e-6. 
LE VARIABILI DEVONO ESSERE SALVATE IN DOPPIA PRECISIONE IN MODO CHE LA PROCEDURA SIA SUFFICIENTEMENTE STABILE.

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

// prototipi funzioni
double newton(double);
double f(double);
double derivata(double);
double tg_x_axis(double);

main ()
{
         double x,newx,errore,eps;
         int counter;
         
         printf("\n********** QUESTO PROGRAMMA CALCOLA LA RADICE DI x^2-2=0 *********");
         printf("\n\n\n");
         
         printf("\n\nInserire il valore del punto iniziale,");
         printf("\n\n                 x= ");
         scanf("%lf",&x);
         
         printf("\n\nInserire la tolleranza: ");
         scanf("%f",&eps);
         
         counter=0;
         do {
             newx=tg_x_axis(x);
             counter++;
             errore=fabs(x-newx);
             x=newx;
         }
         while (errore>eps&&counter<100);
         printf("\n\nLa radice dell'equazione e':  %f",newx);

         system("PAUSE");return 0;
}

// funzioni

double f(double x)
{ 
         double y;
         y=pow(x,2)-2;
         return y;
}
 
double derivata(double x)
{
         double y;
         y=2*x;
         return y;
}

double tg_x_axis(double x)
{ 
         double nuovox;
         nuovox=x-(f(x)/derivata(x));
         return nuovox;
}

aaa
10/01/10 16:17
Poggi Marco
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 10/01/10 17:38
aaa
10/01/10 18:19
Poggi Marco
:_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;
}

aaa
10/01/10 21:08
stella.p
grazie mille, mi sei stato di grande aiuto.. ;)
aaa
10/01/10 21:54
Poggi Marco
Di nulla! :)
aaa