Решение системы нелинейных уравнений с питоном

Могу ли я решить систему нелинейных уравнений по параметрам в python? Есть ли пример или учебник? Я могу сделать это легко в клене, но выражения для моей конкретной системы довольно большие, и их копирование довольно сложно.

Пример:

sigma*(yx) = 0 x*(rho-z)-y = 0 x*y-beta*z = 0 

Вы должны получить решения:

 [[x = 0, y = 0, z = 0], [x = sqrt(beta*rho-beta), y = sqrt(beta*rho-beta), z = rho-1], [x = -sqrt(beta*rho-beta), y = -sqrt(beta*rho-beta), z = rho-1]] 

Причина, по которой я спрашиваю: у меня есть большая система нелинейных ОДУ. Я хочу решить для фиксированных точек (это выполнимо, это сделано в клене, но они большие и уродливые). Я хочу создать дополнительные выражения из неподвижных точек, а затем использовать пакет оптимизации в scipy. Я предпочел бы сделать все это на python, чем переводить вещи туда и обратно, так как он очень неэффективен и могут быть допущены ошибки.

3 Solutions collect form web for “Решение системы нелинейных уравнений с питоном”

sympy ответ @ Russ, это может быть легко достигнуто в sympy . Например:

 In [1]: import sympy as sp In [2]: x, y, z = sp.symbols('x, y, z') In [3]: rho, sigma, beta = sp.symbols('rho, sigma, beta') In [4]: f1 = sigma * (y - x) In [5]: f2 = x * (rho - z) - y In [6]: f3 = x * y - beta * z In [7]: sp.solvers.solve((f1, f2, f3), (x, y, z)) Out[7]: [(0, 0, 0), (-sqrt(beta*rho - beta), -sqrt(beta*(rho - 1)), rho - 1), (sqrt(beta*rho - beta), sqrt(beta*(rho - 1)), rho - 1)] 

где выходной формат – 3 возможных набора возможных значений для (x, y, z) .

Предупреждение. Я разработчик мудреца, поэтому я не могу быть нейтральным.

Я не знаю, как это сделать на чистом Python, но я бы порекомендовал систему Sage , интерфейс которой находится в Python (на самом деле это командная строка – специально сконфигурированный IPython) и позволяет это делать:

 +--------------------------------------------------------------------+ | Sage Version 5.10, Release Date: 2013-06-17 | | Type "notebook()" for the browser-based notebook interface. | | Type "help()" for help. | +--------------------------------------------------------------------+ sage: var("sigma yx rho beta z") (sigma, y, x, rho, beta, z) sage: sys = [sigma*(yx), x*(rho-z)-y, x*y-beta*z] sage: solve(sys, x, y, z) [[x == sqrt(beta*rho - beta), y == (beta*rho - beta)/(sqrt(rho - 1)*sqrt(beta)), z == rho - 1], [x == -sqrt(beta*rho - beta), y == -(beta*rho - beta)/(sqrt(rho - 1)*sqrt(beta)), z == rho - 1], [x == 0, y == 0, z == 0]] 

Обычно это проще использовать следующим образом:

 sage: solve(sys, x, y, z, solution_dict=True) [{z: rho - 1, x: sqrt(beta*rho - beta), y: (beta*rho - beta)/(sqrt(rho - 1)*sqrt(beta))}, {z: rho - 1, x: -sqrt(beta*rho - beta), y: -(beta*rho - beta)/(sqrt(rho - 1)*sqrt(beta))}, {z: 0, x: 0, y: 0}] 

Главным недостатком является то, что Sage – это полное распространение математического программного обеспечения, которое отправляет собственный интерпретатор Python (вместе с огромным множеством других вещей, написанных на многих языках, включая C / C ++, Cython, lisp, fortran) и, как правило, трудно установить, если вы хотите использовать собственный интерпретатор.

Хорошей новостью для вашей проблемы является то, что Scipy уже поставляется с шалфеем.

SymPy может помочь; Я не знаю, насколько это хорошо при решении нелинейных уравнений: http://scipy-lectures.github.io/advanced/sympy.html#id23

Вы должны иметь возможность выполнять код, как (следуя приведенным выше примерам):

 from sympy import * x = Symbol('x') y = Symbol('y') z = Symbol('z') beta = Symbol('beta') rho = Symbol('rho') sigma = Symbol('sigma') solve([sigma*(yx), x*(rho-z)-y, x*y-beta*z], [x, y, z]) 

Я не тестировал, если он работает (у меня нет этой возможности для этой машины).

  • Лучший способ включения сторонних зависимостей в приложение Python
  • Магический вывод трубки Ipython для переменной?
  • Ошибка: тип объекта «Ключи» не имеет атрибута «chord»
  • Как удалить любой URL-адрес в строке в Python
  • BeautifulSoup ведет себя по-разному на машине Amazon EC2
  • Python Decimal - технические обозначения для mili (10e-3) и микро (10e-6)
  • выполнение определенного оператора с заданной скоростью в python
  • Python 2.7.10 64 бит на Win10 - зависание lib / test
  • Python - лучший язык программирования в мире.