Как вернуть конечное (float) значение с nonlinsolve в SymPy? - PullRequest
0 голосов
/ 17 мая 2019

Я очень новичок в программировании, и мне пришлось использовать sympy для школьного проекта.

Думаю, я понял, что использование nonlinsolve для возврата угла дает ImageSet с углом + 2n * pi.Однако я хочу, чтобы он возвращал только значение угла (в интервале [0, pi / 2]) и как одно значение, а не как интервал.

from sympy import nonlinsolve, symbols,cos
x=symbols('x')
print(nonlinsolve([cos(x)-1],[x]).args[0][0])

Я хочу, чтобы результат был 0 а не 2*n*pi.

Пояснение: я знаю, что результат правильный, но мне нужно только одно значение, которое я могу использовать алгебраически, и я не знаю, как работает Sympy (как манипулировать ImageSets) * +1010 *

1 Ответ

0 голосов
/ 17 мая 2019

Так что я могу ошибаться, потому что я не использую sympy, но решение, которое возвращают решатели, кажется мне основополагающим.

ImageSet(Lambda(_n, 2*_n*pi), Integers)

Из того, что я понимаю, решатель возвращает лямбда-функцию.Cosinus - циклическая функция, которая означает, что она повторяет свое значение каждые 2PI.Поэтому решатель говорит, что первое решение (_n = 0) равно 0, второе (_n = 1) - 2pi и т. Д.

посмотрите на график функций, и мы надеемся, что оно будет иметь смысл: Wolfram Alpha -(cos (x) - 1)

РЕДАКТИРОВАТЬ: я думаю, что вам нужно использовать метод пересечения изображения, как это (обратите внимание, что пересечение возвращает все пересечения, здесь я выбрал только первое):

from sympy import nonlinsolve, symbols,cos, Interval
import math

x = symbols('x')
f = nonlinsolve([cos(x)-1], [x]).args[0][0]
sol = f.intersect(Interval(0, math.pi/2)).args[0]
print(sol)
...