Завдання дослідження
Провести дослідження внутрішньої збіжності чисельного інтегрування методом Сімпсона і трапецій різних функцій, що задаються за допомогою мови С.
Детальний опис завдання та способи її вирішення
Необхідно провести дослідження так званої внутрішньої збіжності чисельного інтегрування методами Сімсона і трапецій різних функцій, що задаються за допомогою функцій мови С. Передбачається, що відрізок інтегрування [a, b] розбито на n рівних частин системою точок (сіткою).
Контроль внутрішньої збіжності полягає в циклічному обчисленні наближених значень інтеграла для удваімого в порівнянні зі значенням на попередньому проходженні циклу числа n. Відносини абсолютної величини різниці цих значень до абсолютної величини попереднього наближеного значення приймається як критерій досягнення точності інтеграла.
Побудувати залежності кількості ітерацій від різних величин критерію точності.
Побудувати зворотні залежності критерію точноті від кількості ітерацій.
Повторити всі вищевказані дослідження для випадку, коли при обчисленні критерію точності різниця значень інтеграла відноситься не до попереднього значення, а до точного значення аналітично обчисленого інтеграла.
Дослідити вплив збільшення верхньої межі інтегрування на точність (за інших незмінних умовах)
Метод трапецій
, Де
Метод Сімпсона
, Де
Результати досліджень
*/
# Include
# Include
# Include
# Include
# Include
# Include
int main ()
(
FILE * fp;/* покажчик на потік */
int n, i, t, j, N;
float a, b, h, Sum [100], x, y, coa;
printf ( "Research of Accuracy of Numerical Integrationn");
/ * Введення точності обчислення */
printf ( "Enter accuracy of calculation n =");
scanf ( "% d", & n);
/ * Введення початку інтегрування */
printf ( "Enter beginnings of integration =");
scanf ( "% f", & a);
/ * Введення межі інтегрування */
printf ( "Enter limit of integration =");
scanf ( "% f", & b);
/ * Відкриття файлу-джерела */
while ((fp = fopen ( "data3.xls", "w "))== NULL)
(
puts ( "Error! Can't open file nInput name of filen");
)
/ * Введення кількості ітерацій */
printf ( "Enter number of Itteration N =");
scanf ( "% d", & N);
/ * Обчислення кроку інтегрування */
h = (a + b)/n;
printf ( "Step =% .3 fn", h);
/******* Обчислення інтеграла методом трапецій *******/< br />
for (j = 1; j
(
h = (a + b)/(int (pow (2, j-1)) * n);
Sum [j] = 0;
for (i = 0; i
(
x = a + i * h;
if (i == 0)
t = 1;
else
t = 2;
y = t * (h/2) * (sin (2 * x));
Sum [j] = Sum [j] + y;
)
if (j> 1)
(
coa = (Sum [j]-Sum [j-1])/Sum [j-1];
printf ( "Criterion of accuracy =% .5 f Number of iteration =% dn", coa, j);
fprintf (fp, "% .7 ft", coa);
fprintf (fp, "% dtn", j);
)
)
printf ( "The sum by a method of trapezes =% .7 fn", Sum [1]);
fprintf (fp, "The sum by a method of trapezes =% .7 fn", Sum [1]);
/******* Обчислення інтеграла методом Сімпсона *******/< br />
for (j = 1; j
(
h = (a + b)/(int (pow (2, j-1)) * n);
Sum [j] = 0;
for (i = 0; i
(
x = a + i * h;
if (i == 0 | | i == n)
t = 1;
else
(
if (i% 2 == 0)
t = 2;
else
t = 4;
)
y = t * (h/3) * (sin (2 * x));
Sum [j] = Sum [j] + y;
)
if (j> 1)
(
coa = (Sum [j]-Sum [j-1])/Sum [j-1];
printf ( "Criterion of accuracy =% .5 f Number of iteration =% dn", coa, j);
fprintf (fp, "% .7 ft", coa);
fprintf (fp, "% dtn", j);
)
)
printf ( "The sum by a Simpson's method =% .7 fn", Sum [1]);
fprintf (fp, "The sum by a Simpson's method =% .7 fn", Sum [1]);
scanf ( "% d", & b);
)
5