@Hulumulula
Newbie in programm

Как воспроизвести решение данной функции sin(x)=x в python?

Мне нужно найти все решения данной функции в python. Как мне можно это сделать? Если взять ограничения синуса и прибавлять к -1 + 0,00001 он все равно все решения не находит. К тому же под синусом х в радианах.
  • Вопрос задан
  • 1221 просмотр
Решения вопроса 1
adugin
@adugin Куратор тега Python
Посмотрите в эту сторону: scipy.optimize
from scipy.optimize import minimize
import numpy as np

def func(x):
    return np.abs(np.sin(x)-x)

minimize(func, -1)

Результат:
fun: 1.3390927663600727e-08
 hess_inv: array([[ 109.41685172]])
      jac: array([ -9.30984970e-06])
  message: 'Optimization terminated successfully.'
     nfev: 36
      nit: 11
     njev: 12
   status: 0
  success: True
        x: array([-0.00431507])

Извлечение значений:
result = minimize(func, -1)
print(result.fun)  # => 1.3390927663600727e-08
print(result.x[0])  # => -0.0043150659686

То есть найдено приблизительное решение x=-0.00431507. Проверка:
x = -0.00431507
sin(x) - x  # => 1.3390965196077853e-08

Методы можно менять, это влияет на точность:
result = minimize(func, -1, method='Nelder-Mead')
Там ещё есть куча интересных аргументов, изучайте.

P.S. Но вообще странно искать очевидное решение программно.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@red-barbarian
sin(x) - x = 0
решение будет естественно с некой не нулевой точностью |d|.
sin(x) - x = y(x)
т.е. нужно искать такой промежуток [x1,x2], |x1-x2| = |d|
на котором функция y(x) поменяет знак.
или если в лоб,
найти x
y(x) > 0 and y(x+0.00001)<0
или y(x)<0 and y(x+0.00001)>0

решение можно оптимизировать
Ответ написан
def solve():
    return 0


А что там решать – только в нуле будет равенство.
5a1c827a2c771468350150.png
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы