fork download
  1. import numpy as np
  2. import math
  3. from decimal import Decimal, getcontext
  4.  
  5. # Устанавливаем нужную точность (например, 50 знаков после запятой)
  6. getcontext().prec = 50
  7.  
  8. def func(x):
  9. # Переводим x в Decimal для точных вычислений
  10. x_decimal = Decimal(x)
  11. return (x_decimal.sqrt() + 7).sqrt() - 3 * Decimal(math.cos(float(x_decimal)))
  12.  
  13. def derivative(func, x, dx=1e-6):
  14. # Также используем Decimal для вычислений производной
  15. x_decimal = Decimal(x)
  16. dx_decimal = Decimal(dx)
  17. return (func(x_decimal + dx_decimal) - func(x_decimal - dx_decimal)) / (2 * dx_decimal)
  18.  
  19. # Начальные условия
  20. e = Decimal(0.001) # Точность с использованием Decimal
  21. x0 = Decimal(9) # Начальное приближение
  22. max_iter = 100 # Ограничение по итерациям
  23.  
  24. # Метод Ньютона (касательной)
  25. for _ in range(max_iter):
  26. x = x0 - func(x0) / derivative(func, x0)
  27.  
  28. if abs(x - x0) < e: # Проверяем точность
  29. break
  30. x0 = x # Обновляем x0
  31.  
  32. # Печатаем результат с высокой точностью
  33. print(f"Найденный корень: {x:.50f}")
Success #stdin #stdout 0.82s 41344KB
stdin
45
stdout
Найденный корень: 4.55723421544128139285493680792084505585826273841000