Нахождение всех корней функции x = a * sin (x) в Python - PullRequest
3 голосов
/ 20 января 2020

Я должен найти номер решения в зависимости от параметра а. При численном решении уравнения с использованием scipy.optimize. root я получаю некоторые числа, которые не являются root функцией. Например, для x = 7 * sin (x) я получаю числа -7.71046524 и 7.71046524. Мой код:

a = np.linspace(-5, 5)

def fun(x):
    return x - b*np.sin(x)

for i in a:
    solutions = []
    b = i
    c = abs(int(round(i)))
    for j in range(-c, c+1):
        y = root(fun, j)
        if (round(y.x[0], 3) not in solutions):
            solutions.append(round(y.x[0], 3))
    print(len(solutions))

1 Ответ

2 голосов
/ 20 января 2020

Если вы используете scipy.optimize.root, возвращаемое значение содержит x массив решений и логический флаг success. Вам нужно отфильтровать любой результат, где success равно False.

import numpy as np
from scipy.optimize import root

a = np.linspace(-7, 7)

def fun(x):
    return x - b*np.sin(x)

for i in a:
    solutions = []
    b = i
    c = abs(int(round(i)))
    for j in range(-c, c+1):
        y = root(fun, j)
        if y.success and (round(y.x[0], 6) not in solutions):
            solutions.append(round(y.x[0], 3))
    print(i, solutions)
...