Исходник вычисление интеграла от заданной функции.
Квадратная формула трапеции.
Вычисление погрешности по правилу Рунге.
Исходный код на C++
Код на C++ #include <conio.h> #include <stdio.h> #include <math.h> // Заданная функция float f1 (float x) { return 1/sqrt(2+0.5*x*x); } void main(void) { /* a и b -границы отрезка, на котором ищется интеграл n – число отрезков h – шаг Q1 – значение интеграла при n=8 Q2 – значение интеграла при n=16 */ float a,b,h,Q1,Q2,Q; int n,i; // объявили переменные float s1=0, s2=0, x=a; a = 0.4; b = 1.2; clrscr(); // очистка экрана puts("\n\n\n\t--== Formula Simpsona ==--"); n = 8; h = (b-a)/n; x=a; Q1 = f1(a)+f1(b); s1=0; s2=0; for (i=1; i<n; i++) { x += h; if (i%2) // сумма значений функции в точках с нечетными номерами s1 += f1(x); else // сумма значений функции в точках с четными номерами s2 += f1(x); } Q1 = h/3*(Q1+4*s1+2*s2); printf ("\n\t\tn= 8:"); printf ("\n Priblijennoe znachenie integrala: %.7f", Q1); n = 16; h = (b-a)/n; Q2 = f1(a)+f1(b); s1=0; s2=0; x=a; for ( i=1; i<n; i++) { x += h; if (i%2) // сумма значений функции в точках с нечетными номерами s1 += f1(x); else // сумма значений функции в точках с четными номерами s2 += f1(x); } Q2 = h/3*(Q2+4*s1+2*s2); printf ("\n\t\tn= 16:"); printf ("\n Priblijennoe znachenie integrala: %.7f", Q2); Q= fabs(Q1-Q2)/15; printf("\n\n Pogreshnost' po pravilu Runge: R=%.2e",Q); n=10; do { s1=0; s2=0; x=a; n++; h = (b-a)/n; for (i=1; i<n; i++) { x += h; s1 += f1(x); s2 += f1(x+h); } Q1 = h/2*(s1+s2); } while((Q2-Q1)>0.0001); printf("\n\n\n\t--== Kvadratnaya Formula Trapecii ==--"); printf ("\n\t\tn= %d:",n); printf ("\n Priblijennoe znachenie integrala: %.7f", Q1); getch(); }
|