Advertisement
Guest User

esercizio1 28-09-2015

a guest
Oct 7th, 2015
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.24 KB | None | 0 0
  1. /*
  2. * dall'analisi che ho fatto
  3. * 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
  4. * 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
  5. * con a=100, x0=3, al crescere di n l'errore aumenta.
  6. */
  7.  
  8. #include <stdio.h>
  9. #include <math.h>
  10.  
  11. double epsilon_macchina(int b, double E){
  12. double eps,E2;
  13. while(E2 != 1){
  14. eps = E;
  15. E = E/(double)b;
  16. E2 = E + 1;
  17. }
  18. return eps;
  19. }
  20.  
  21. double sequenza1(int,double,double);
  22. double sequenza2(int,double,double);
  23. void stampa(double,double,double,int);
  24. void analisiPunti();
  25.  
  26. int main(){
  27. system("clear");
  28. int base,n;
  29. double E, epsilon, a, x, seq1, seq2;
  30. E = 1.0;
  31. base = 2;
  32. epsilon = epsilon_macchina(base,E);
  33. printf("\n*****Punto 1******\nEpsilon macchina = %.64lf\n", epsilon);
  34.  
  35. //punto2
  36. a = 1.2;
  37. n = 5;
  38. x = 8;
  39. seq1 = sequenza1(n,a,x);
  40. seq2 = sequenza2(n,a,x);
  41.  
  42. printf("\n*****punto 2*****\na = 1.2, n = 5, x0 = 8.\nSequenza 1(x): \t%.64lf\nSequenza 2(x): \t%.64lf\n", seq1, seq2);
  43. double delta = (seq2 - seq1);
  44. double y = x + delta;
  45. printf("y0: \t\t%.64lf\n", y);
  46. double seq3 = sequenza1(n,a,y);
  47. printf("Sequenza 3(y): \t%.64lf\n\n", seq3);
  48. printf("ERRORE RELATIVO: %.64lf\n",delta);
  49.  
  50. double errore_assoluto = y-x;
  51. if(errore_assoluto < 0)
  52. errore_assoluto *= -1;
  53. printf("ERRORE ASSOLUTO: %.64lf\n", errore_assoluto);
  54. printf("Epsilon macchina: %.64lf\n\n", epsilon);
  55. if(errore_assoluto > epsilon)
  56. printf("Epsilon è minore del valore assoluto.\n");
  57. else
  58. printf("Epsilon è maggiore del valore assoluto.\n");
  59. printf("\n");
  60. //stampa(x,y,a,n); lo commento per escluderlo
  61.  
  62. //punto3
  63. printf("*****Punto 3*****\n"); //Inserisco tre verifiche cosi da confrontare i risultati al variare dei valori
  64. printf("Verifica 1:\n");
  65. analisiPunti();
  66. printf("Verifica 2:\n");
  67. analisiPunti();
  68. printf("Verifica 3:\n");
  69. analisiPunti();
  70. return 0;
  71. }
  72.  
  73. double sequenza1(int n, double a, double x){
  74. double risultato;
  75. int i;
  76. for (i = 0; i < n; ++i){
  77. risultato = a*x;
  78. x = risultato;
  79. }
  80. return risultato;
  81. }
  82.  
  83. double sequenza2(int n, double a, double x){
  84. return pow(a,(double)n)*x;
  85. }
  86.  
  87. void stampa(double x, double y, double a, int n){
  88. double ris1, ris2, risfin;
  89. int i;
  90. for(i = 0; i < n; ++i){
  91. ris1 = a*x;
  92. x = ris1;
  93. ris2 = a*y;
  94. y = ris2;
  95. risfin = ris2-ris1;
  96. if(risfin < 0)
  97. risfin *= -1;
  98. printf("Errore iterazione %d: \t%.64lf\n", i+1, risfin);
  99. }
  100. printf("\n\n");
  101. return;
  102. }
  103.  
  104. void analisiPunti(){
  105. double a,x,y,delta, delta2;
  106. int n;
  107. printf("Inserisci a: ");
  108. scanf("%lf",&a);
  109. printf("Inserisci n: ");
  110. scanf("%d",&n);
  111. printf("Inserisci x0: ");
  112. scanf("%lf",&x);
  113. printf("\n\nSequenza 1: \t%.64lf\nSequenza 2: \t%.64lf\n", sequenza1(n,a,x), sequenza2(n,a,x));
  114. delta = sequenza1(n,a,x) - sequenza2(n,a,x);
  115. if (delta < 0)
  116. delta *= -1;
  117. y = x - delta;
  118. printf("y0 = \t\t%.64lf\nSequenza 3(y): \t%.64lf\nERRORE RELATIVO: %.64lf\n",y, sequenza1(n,a,y), delta);
  119. delta2 = sequenza1(n,a,y)-sequenza1(n,a,x);
  120. if(delta2 < 0)
  121. delta2 *= -1;
  122. printf("ERRORE ASSOLUTO: %.64lf\n\n", delta2);
  123. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement