Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * dall'analisi che ho fatto
- * con a=10,x0=3, con n da 0 a 24, l'errore è pari a zero. con n>25, l'errore è crescente al variare di n
- * con a=0.1, x0=3, al crescere di n l'errore diminuisce. Ho verificato da n=10 e l'errore era gia molto piccolo
- * con a=100, x0=3, al crescere di n l'errore aumenta.
- */
- #include <stdio.h>
- #include <math.h>
- double epsilon_macchina(int b, double E){
- double eps,E2;
- while(E2 != 1){
- eps = E;
- E = E/(double)b;
- E2 = E + 1;
- }
- return eps;
- }
- double sequenza1(int,double,double);
- double sequenza2(int,double,double);
- void stampa(double,double,double,int);
- void analisiPunti();
- int main(){
- system("clear");
- int base,n;
- double E, epsilon, a, x, seq1, seq2;
- E = 1.0;
- base = 2;
- epsilon = epsilon_macchina(base,E);
- printf("\n*****Punto 1******\nEpsilon macchina = %.64lf\n", epsilon);
- //punto2
- a = 1.2;
- n = 5;
- x = 8;
- seq1 = sequenza1(n,a,x);
- seq2 = sequenza2(n,a,x);
- printf("\n*****punto 2*****\na = 1.2, n = 5, x0 = 8.\nSequenza 1(x): \t%.64lf\nSequenza 2(x): \t%.64lf\n", seq1, seq2);
- double delta = (seq2 - seq1);
- double y = x + delta;
- printf("y0: \t\t%.64lf\n", y);
- double seq3 = sequenza1(n,a,y);
- printf("Sequenza 3(y): \t%.64lf\n\n", seq3);
- printf("ERRORE RELATIVO: %.64lf\n",delta);
- double errore_assoluto = y-x;
- if(errore_assoluto < 0)
- errore_assoluto *= -1;
- printf("ERRORE ASSOLUTO: %.64lf\n", errore_assoluto);
- printf("Epsilon macchina: %.64lf\n\n", epsilon);
- if(errore_assoluto > epsilon)
- printf("Epsilon è minore del valore assoluto.\n");
- else
- printf("Epsilon è maggiore del valore assoluto.\n");
- printf("\n");
- //stampa(x,y,a,n); lo commento per escluderlo
- //punto3
- printf("*****Punto 3*****\n"); //Inserisco tre verifiche cosi da confrontare i risultati al variare dei valori
- printf("Verifica 1:\n");
- analisiPunti();
- printf("Verifica 2:\n");
- analisiPunti();
- printf("Verifica 3:\n");
- analisiPunti();
- return 0;
- }
- double sequenza1(int n, double a, double x){
- double risultato;
- int i;
- for (i = 0; i < n; ++i){
- risultato = a*x;
- x = risultato;
- }
- return risultato;
- }
- double sequenza2(int n, double a, double x){
- return pow(a,(double)n)*x;
- }
- void stampa(double x, double y, double a, int n){
- double ris1, ris2, risfin;
- int i;
- for(i = 0; i < n; ++i){
- ris1 = a*x;
- x = ris1;
- ris2 = a*y;
- y = ris2;
- risfin = ris2-ris1;
- if(risfin < 0)
- risfin *= -1;
- printf("Errore iterazione %d: \t%.64lf\n", i+1, risfin);
- }
- printf("\n\n");
- return;
- }
- void analisiPunti(){
- double a,x,y,delta, delta2;
- int n;
- printf("Inserisci a: ");
- scanf("%lf",&a);
- printf("Inserisci n: ");
- scanf("%d",&n);
- printf("Inserisci x0: ");
- scanf("%lf",&x);
- printf("\n\nSequenza 1: \t%.64lf\nSequenza 2: \t%.64lf\n", sequenza1(n,a,x), sequenza2(n,a,x));
- delta = sequenza1(n,a,x) - sequenza2(n,a,x);
- if (delta < 0)
- delta *= -1;
- y = x - delta;
- printf("y0 = \t\t%.64lf\nSequenza 3(y): \t%.64lf\nERRORE RELATIVO: %.64lf\n",y, sequenza1(n,a,y), delta);
- delta2 = sequenza1(n,a,y)-sequenza1(n,a,x);
- if(delta2 < 0)
- delta2 *= -1;
- printf("ERRORE ASSOLUTO: %.64lf\n\n", delta2);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement