Составить программу (Python) вычисления приближенных значений определенного интеграла...

0 голосов
72 просмотров

Составить программу (Python) вычисления приближенных значений определенного интеграла двумя предложенными методами, а также точного его значения по первообразной. Вычислить абсолютную и относительную ошибки для каждого приближенного метода. Пределы интегрирования a и b, а также число N подынтервалов задавать при вводе. Выполняя программы при вводимых N = 50 ∙ k, k = 1, 2, 3, …, 8, установить зависимость величины относительной погрешности от N.


image

Информатика (280 баллов) | 72 просмотров
Дан 1 ответ
0 голосов

Python 3.7.0. Прикрепил текстовый файл с кодом.

import math

def fpod (x):           #значение подынтегральной функции

   F = 1 / x * math.log(x)

   return F

def fperv (x):          #значение первообразной подынтегральной функции

   F = math.log(math.log(x))

   return F

def metodtrap(N, a, b): # метод трапеций

   delx = (b - a) / N

   ind = a + delx

   sumfpod = 0

   sumfperv = 0

   while (ind < b):

       sumfpod += 2 * fpod(ind)

       sumfperv += 2 * fperv(ind)

       ind += delx

   sumfpod = ( sumfpod + fpod(a) + fpod(b) ) * delx / 2

   sumfperv = ( sumfperv + fperv(a) + fperv(b) ) * delx / 2

   print("Методом трапеции от подынтегральной функции: " + str(sumfpod))

   print("Методом трапеции от первообразной подынтегральной функции: " + str(sumfperv))

   return (sumfperv, sumfpod)

def metodlevpr(N, a, b):    #метод левых прямоугольников

   delx = (b - a) / N

   ind = a

   sumprperv = 0

   sumprpod = 0

   while (ind < b):

       sumprperv += fperv(ind)

       sumprpod += fpod(ind)

       ind += delx

   sumprperv = delx * sumprperv

   sumprpod = delx * sumprpod

   print("Методом левых прямоугольников от подынтегральной функции: " + str(sumprpod))

   print("Методов левых прямоугольников от первообразной подынтегральной функции: " + str(sumprperv))

   return (sumprperv, sumprpod)

N = int(input("N: "))

a = int(input("a: "))

b = int(input("b: "))

trap = metodtrap(N, a, b) # кортеж (результат перв. подынт. функции, результат подынт. функции)

pr = metodlevpr(N, a, b) # кортеж (результат перв. подынт. функции, результат подынт. функции)

if (trap[0] < trap[1]):                     # нахождение абсолютной погрешности

   abs_pog_trap = trap[1] - trap[0]

   print("Абсолютная погрешность (метод трапеции): " + str(abs_pog_trap))

else:

   abs_pog_trap = trap[0] - trap[1]

   print("Абсолютная погрешность (метод трапеции): " + str(abs_pog_trap))

if (pr[0] < pr[1]):

   abs_pog_pr = pr[1] - pr[0]

   print("Абсолютная погрешность (метод л.прямоугольников): " + str(abs_pog_pr))

else:

   abs_pog_pr = pr[0] - pr[1]

   print("Абсолютная погрешность (метод л.прямоугольников): " + str(abs_pog_pr))

print("Относительная погрешность (метод трапеции): " + str(int(round(abs_pog_trap / trap[0], 2) * 100)) + "%")

print("Относительная погрешность (метод л.прямоугольников): " + str(int(round(abs_pog_pr / pr[0], 2) * 100)) + "%")



Скачать вложение Текст (TXT)
(654k баллов)