Подтвердить что ты не робот

Самый простой способ решения математических уравнений в Python

Я хочу решить набор уравнений, линейный или иногда квадратичный. У меня нет конкретной проблемы, но часто я часто бываю в этой ситуации.

Проще использовать wolframalpha.com, веб-эквивалент Mathematica, чтобы решить их. Но это не обеспечивает комфорт и удобство оболочки iPython.

Существует ли простая библиотека для работы с линейными и квадратичными уравнениями из оболочки python?

Лично мне очень удобно пользоваться научным калькулятором Casio 991 MS. Я знаю, как устанавливать переменные, решать уравнения и делать многое. Я хочу, чтобы такой инструмент можно было использовать в оболочке ipython. Я удивлен, что не нашел. Я недостаточно впечатлен мудрецом; возможно, я чего-то не хватает.

4b9b3361

Ответ 1

sympy - именно то, что вы ищете.

Ответ 2

Вы отказываетесь от лучшего ответа как неприемлемого.

Ваш вопрос: "Я хочу бесплатную Систему алгебры языков, которую я могу использовать в Python".

Ответ: "SAGE делает это".

Вы посмотрели на maxima/macsyma? SAGE обеспечивает привязки для него и что один из более мощных свободных.

http://maxima.sourceforge.net/

Ответ 3

Вот как решить свой исходный вопрос, используя Python (через Sage). Это в основном разъясняет замечание, которое делает Пол Макмиллан.

sage: a,b,c = var('a,b,c')
sage: solve([a+b+c==1000, a^2+b^2==c^2], a,b,c)
[[a == 1000*(r1 + sqrt(r1^2 + 2000*r1 - 1000000))/(r1 + sqrt(r1^2 + 2000*r1 - 1000000) + 1000), b == -1/2*r1 - 1/2*sqrt(r1^2 + 2000*r1 - 1000000) + 500, c == r1], [a == 1000*(r2 - sqrt(r2^2 + 2000*r2 - 1000000))/(r2 - sqrt(r2^2 + 2000*r2 - 1000000) + 1000), b == -1/2*r2 + 1/2*sqrt(r2^2 + 2000*r2 - 1000000) + 500, c == r2]]

Ответ 4

Для неточных решений прочитайте линейное программирование и последовательная квадратичная оптимизация, затем выполните поиск библиотек Python, которые выполняют такие оптимизации для вас.

Если уравнения требуют целочисленных решений, вы должны искать решения диофантовых уравнений для Python.

Просто отметьте, что использование простого решателя для Project Euler отсутствует. Увлекательная и образовательная часть учится решать ее самостоятельно с помощью примитивных методов!

Ответ 6

Бесплатный веб-сервис для решения крупномасштабных систем нелинейных уравнений (1 млн. +) - APMonitor.com. Интерфейс браузера и API для Python/MATLAB. API для Python - это единственный script (apm.py), доступный для загрузки с домашней страницы apmonitor.com. Как только script загружается в код Python, он дает возможность решать проблемы:

  • Нелинейные уравнения
  • Дифференциальные и алгебраические уравнения
  • Моделирование наименьших квадратов
  • Оценка движущегося горизонта
  • Прогностическое управление нелинейной моделью
  • и др.

Для нового пользователя программное обеспечение APM Python имеет форум Google Groups, на котором пользователь может публиковать вопросы. Существуют двухнедельные вебинары, которые демонстрируют проблемы оптимизации в исследованиях и разработке операций.

Ниже приведен пример проблемы оптимизации (hs71.apm).

Model

  Variables

    x[1] = 1, >=1, <=5

    x[2] = 5, >=1, <=5

    x[3] = 5, >=1, <=5

    x[4] = 1, >=1, <=5

  End Variables



  Equations

    x[1] * x[2] * x[3] * x[4] > 25

    x[1]^2 + x[2]^2 + x[3]^2 + x[4]^2 = 40



    minimize  x[1] * x[4] * (x[1]+x[2]+x[3]) + x[3]

  End Equations

End Model

Задача оптимизации решается с помощью следующего Python script:

# Import

from apm import *

# Select server

server = 'http://xps.apmonitor.com'

# Application name

app = 'eqn'

# Clear previous application

apm(server,app,'clear all')

# Load model file

apm_load(server,app,'hs71.apm')

# Option to select solver (1=APOPT, 2=BPOPT, 3=IPOPT)

apm_option(server,app,'nlc.solver',3)

# Solve on APM server

solver_output = apm(server,app,'solve')


# Display solver output

print solver_output


# Retrieve results

results = apm_sol(server,app)

# Display results

print '--- Results of the Optimization Problem ---'

print results

# Display Results in Web Viewer 

url = apm_var(server,app)

print "Opened Web Viewer: " + url

Ответ 7

Для справки: Wolfram Alpha solution:

a-1000!=0,   b = (1000 (a-500))/(a-1000),   c = (-a^2+1000 a-500000)/(a-1000)

В python, используя модуль sympy solver (обратите внимание, что он предполагает, что все уравнения установлены равными нулю):

>>> import sympy
>>> a, b, c = sympy.symbols('a, b, c')
>>> sympy.solve([a + b + c - 1000, a**2 + b**2 - c**2], b, c)
[(1000*(a - 500)/(a - 1000), (-a**2 + 1000*a - 500000)/(a - 1000))]

И, конечно, a!= 1000, а-1000 - знаменатель двух уравнений.

Ответ 8

Я только начал использовать Научная библиотека GNU, которая, однако, является библиотекой C. Похоже, что есть Python привязки. Поэтому, возможно, стоит посмотреть.

Ответ 9

Я бы использовал Octave для этого, но я согласен, синтаксис Octave не то, что я бы назвал захватывающим ( и документы всегда путают меня больше, чем они помогают).

Ответ 10

Я не думаю, что существует единый способ решения как линейных, так и квадратичных (или вообще нелинейных) уравнений одновременно. С линейными системами python имеет привязки к линейной алгебре и пакетам матриц. Нелинейные задачи, как правило, решаются в каждом конкретном случае.

Ответ 11

Это зависит от ваших потребностей:

Если вам нужен интерактивный графический интерфейс, то, вероятно, лучшим решением будет sage.

Если вы хотите избежать использования графического интерфейса, но вы все еще хотите сделать компьютерную алгебру, то sympy или maxima могут удовлетворить ваши потребности. (sympy выглядит очень многообещающим, но ему еще предстоит пройти долгий путь, прежде чем они смогут заменить математику).

Если вам действительно не нужна символическая альгребра, но вам нужен способ программирования с помощью матриц, решения дифференциальных уравнений и минимизации функций, то scipy или октава являются отличными исходными точками.

Ответ 13

Хорошо, я просто попал на эту страницу случайно. Я вижу много предложений относительно этого и того программного инструмента, но действительно ли какой-либо инструмент дает ответ? Фактический ответ:

[a, b, c] = [200,375,425]

Как я это понял? Написав краткую программу на языке программирования Maxima, найдите ее с помощью поиска "грубой силы". Это было всего около 10 минут, чтобы написать, видя, как я знаком с языком Maxima. Программе потребовалось несколько секунд. Вот программа:

euler_solve(): = block   (   [a, b, A, B, end: 1000],

for a thru end do
    (
    for b thru end do
        (
        c: 1000 -a -b,
        if c < 0 then
            b:end
        else if a^2 + b^2 = c^2 then
            (
            A:a,
            B:b,
            a:end,
            b:end
            )
        )
    ),
return( [A,B,c])
);

Вы можете просто вырезать и вставить вышеуказанный код в пользовательский интерфейс wxMaxima, который я запускаю под Ubuntu, а не с MS Windows. Затем вы просто вводите имя функции: euler_solve(), нажмите return, подождите несколько секунд и вытащите ответ. Эта конкретная проблема настолько проста, что вы можете использовать любой язык программирования общего назначения для поиска.

Ответ 14

Во-вторых, я подробно рассмотрел мудрец и ясно, что это лучшее математическое бесплатное программное обеспечение.

Просто некоторые из различных библиотек, связанных с математикой на языке python, интегрируются в нее абсолютно потрясающе.

Пакеты математики, содержащиеся в Sage:

Algebra GAP, Maxima, Singular 
Algebraic Geometry  Singular
Arbitrary    Precision
Arithmetic  GMP, MPFR, MPFI,    NTL
Arithmetic Geometry PARI, NTL,      
mwrank, ecm Calculus    Maxima, SymPy, 
GiNaC Combinatorics Symmetrica,     
Sage-Combinat Linear Algebra    Linbox,
IML Graph Theory    NetworkX Group     
Theory  GAP Numerical
computation GSL,    SciPy, NumPy,
ATLAS

Другие пакеты, содержащиеся в Sage:

Command line    IPython Database    ZODB,
Python Pickles, SQLite Graphical
Interface   Sage Notebook, jsmath
Graphics    Matplotlib, Tachyon3d, GD,
Jmol Interactive 
programming language  Python 
Networking  Twisted