Исходник вычисление интеграла от заданной функции, погрешность по правилу Рунге на C++


Добавил:DMT
Дата создания:27 января 2008, 3:33
Дата обновления:27 января 2008, 3:36
Просмотров:9029 последний сегодня, 2:37
Комментариев: 1
Исходник вычисление интеграла от заданной функции.
Квадратная формула трапеции.
Вычисление погрешности по правилу Рунге.
Исходный код на C++
Код на C++
  1. #include <conio.h>
  2. #include <stdio.h>
  3. #include <math.h>
  4.  
  5. // Заданная функция
  6. float f1 (float x) { return 1/sqrt(2+0.5*x*x); }
  7.  
  8. void main(void)
  9. {
  10. /* a и b -границы отрезка, на котором ищется интеграл
  11. n – число отрезков
  12. h – шаг
  13. Q1 – значение интеграла при n=8
  14. Q2 – значение интеграла при n=16
  15. */
  16. float a,b,h,Q1,Q2,Q; int n,i; // объявили переменные
  17. float s1=0, s2=0, x=a;
  18.  
  19. a = 0.4; b = 1.2;
  20. clrscr(); // очистка экрана
  21. puts("\n\n\n\t--== Formula Simpsona ==--");
  22. n = 8; h = (b-a)/n;
  23. x=a;
  24. Q1 = f1(a)+f1(b);
  25. s1=0;
  26. s2=0;
  27. for (i=1; i<n; i++)
  28. {
  29. x += h;
  30. if (i%2)
  31. // сумма значений функции в точках с нечетными номерами
  32. s1 += f1(x);
  33. else
  34. // сумма значений функции в точках с четными номерами
  35. s2 += f1(x);
  36. }
  37.  
  38. Q1 = h/3*(Q1+4*s1+2*s2);
  39. printf ("\n\t\tn= 8:");
  40. printf ("\n Priblijennoe znachenie integrala: %.7f", Q1);
  41. n = 16;
  42. h = (b-a)/n;
  43.  
  44. Q2 = f1(a)+f1(b);
  45. s1=0; s2=0; x=a;
  46. for ( i=1; i<n; i++)
  47. {
  48. x += h;
  49. if (i%2)
  50. // сумма значений функции в точках с нечетными номерами
  51. s1 += f1(x);
  52. else
  53. // сумма значений функции в точках с четными номерами
  54. s2 += f1(x);
  55. }
  56.  
  57. Q2 = h/3*(Q2+4*s1+2*s2);
  58. printf ("\n\t\tn= 16:");
  59. printf ("\n Priblijennoe znachenie integrala: %.7f", Q2);
  60.  
  61. Q= fabs(Q1-Q2)/15;
  62. printf("\n\n Pogreshnost' po pravilu Runge: R=%.2e",Q);
  63.  
  64. n=10;
  65. do {
  66. s1=0; s2=0; x=a;
  67. n++; h = (b-a)/n;
  68. for (i=1; i<n; i++)
  69. {
  70. x += h;
  71. s1 += f1(x);
  72. s2 += f1(x+h);
  73. }
  74. Q1 = h/2*(s1+s2);
  75. } while((Q2-Q1)>0.0001);
  76. printf("\n\n\n\t--== Kvadratnaya Formula Trapecii ==--");
  77. printf ("\n\t\tn= %d:",n);
  78. printf ("\n Priblijennoe znachenie integrala: %.7f", Q1);
  79.  
  80. getch();
  81. }
При использовании обязательна ссылка на http://DMTSoft.ru
up