Форум сайта python.su
Всем здравствуйте! Мне необходимо решить задачу по следующему условию: Вычислить интеграл и найти такое n, при котором интеграл будет получен с
относительной погрешностью, равной 0,01%. Я пытаюсь долго понять, как находить n, я написал программу, но она не выводит очень долго (или вообще) число n:
import math
def f(x):
return math.exp(x)*((1+math.sin(x))/(1+math.cos(x)))
def Is(a,b,n):
s = 0
x = a
h = (b-a)/n
for i in range(1,n):
x=x+h
s=s+f(x)
return (2*s+f(a)+f(b))*h/2
def F(x):
return math.exp(x)*math.tan(x/2)
a=0
b=1.5
result=F(b)-F(a)
print(“Точное значение интеграла: {0:.9}”.format(result))
for n in range(1,100):
integral = Is(a,b,n)
absol = abs(result-integral)
d= (absol/result)*100
while d>=0.01:
n *= 2
s1 = Is(a,b,n)
print(“Интеграл по методу трапеций: {0:.9} при n={1}”.format(s1,n))
Помогите, пожалуйста, оптимизировать программу таким образом, чтобы при заданной относительной погрешности 0.01 нужно найти n. Буду очень благодарен за помощь!
Офлайн
import math def f(x): return math.exp(x) * ((1 + math.sin(x)) / (1 + math.cos(x))) def Is(a, b, n): """ Вычисляет интеграл методом трапеций с использованием векторных операций. Args: a: нижний предел интегрирования b: верхний предел интегрирования n: количество промежутков Returns: Значение интеграла """ h = (b - a) / n x = np.linspace(a, b, n + 1) y = f(x) return h * (np.sum(y[:-1]) + y[-1]) / 2 def F(x): return math.exp(x) * math.tan(x / 2) a = 0 b = 1.5 result = F(b) - F(a) print(f"Точное значение интеграла: {result:.9f}") # Определение n для заданной погрешности error_tolerance = 0.01 n = 1 while True: integral = Is(a, b, n) absolute_error = abs(result - integral) relative_error = (absolute_error / result) * 100 if relative_error <= error_tolerance: break n *= 2 print(f"Интеграл по методу трапеций: {integral:.9f} при n = {n}")
Офлайн
ZerGЯ благодарен Вам за решение программы!
Офлайн