Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 19, 2024 03:12:02

YuryPanov
Зарегистрирован: 2024-04-19
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите, пожалуйста, с решением задачи по нахождению интеграла в Python

Всем здравствуйте! Мне необходимо решить задачу по следующему условию: Вычислить интеграл и найти такое 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. Буду очень благодарен за помощь!

Офлайн

#2 Апрель 19, 2024 14:04:55

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2605
Репутация: +  62  -
Профиль   Отправить e-mail  

Помогите, пожалуйста, с решением задачи по нахождению интеграла в Python

 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}")



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#3 Апрель 19, 2024 15:31:52

YuryPanov
Зарегистрирован: 2024-04-19
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите, пожалуйста, с решением задачи по нахождению интеграла в Python

ZerG
Я благодарен Вам за решение программы!

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version