sistema numerica escribir edo ecuaciones diferencias diferenciales derivada con como python math numpy scipy equation

numerica - La forma más sencilla de resolver ecuaciones matemáticas en Python



sistema de ecuaciones sympy (15)

Quiero resolver un conjunto de ecuaciones, lineales, o algunas veces cuadráticas. No tengo un problema específico, pero a menudo, he estado en esta situación a menudo.

Es fácil usar wolframalpha.com , el equivalente web de Mathematica, para resolverlos. Pero eso no proporciona la comodidad y la conveniencia de un shell iPython.

¿Existe una biblioteca simple para trabajar con ecuaciones lineales y cuadráticas desde un shell de python?

Personalmente, me parece extremadamente conveniente usar la calculadora científica Casio 991 MS. Sé cómo establecer variables, resolver ecuaciones y hacer mucho. Quiero una herramienta de este tipo, preferiblemente utilizable desde dentro de un shell ipython. Me sorprende no haber encontrado ninguna. No estoy suficientemente impresionado por el sabio; Tal vez me esté perdiendo algo.




Aquí es cómo resolver su pregunta original utilizando Python (a través de Sage). Básicamente, esto aclara la observación que hace Paul McMillan.

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]]


Bueno, acabo de googlear en esta página por accidente. Veo muchas sugerencias con respecto a esta y esa herramienta de software, pero ¿alguna herramienta realmente proporciona una respuesta? La respuesta real es:

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

¿Cómo conseguí esto? Al escribir un programa rápido en el lenguaje de programación Maxima para encontrarlo a través de la búsqueda de "fuerza bruta". Solo tomó 10 minutos para escribir, ya que estoy familiarizado con el lenguaje de Maxima. El programa tardó unos segundos en ejecutarse. Aquí está el programa:

euler_solve (): = bloque ([a, b, A, B, final: 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]) );

Simplemente puede cortar y pegar el código anterior en la interfaz de usuario de wxMaxima, que ejecuto en Ubuntu y no en MS Windows. Luego simplemente ingresa el nombre de la función: euler_solve (), pulsa retorno, espera unos segundos y aparece la respuesta. Este tipo particular de problema es tan simple que podría usar cualquier lenguaje de programación de propósito general para hacer la búsqueda.


Depende de tus necesidades:

Si desea una interfaz gráfica interactiva, entonces Sage es probablemente la mejor solución.

Si desea evitar el uso de una interfaz gráfica, pero aún desea hacer álgebra computacional, entonces Sympy o Maxima pueden cubrir sus necesidades. (Sympy parece muy prometedora, pero aún queda un largo camino por recorrer antes de que puedan reemplazar las matemáticas).

Si realmente no necesita algrebra simbólico, pero necesita una forma de programar con matrices, resolver ecuaciones diferenciales y minimizar funciones, entonces scipy u octave son excelentes puntos de partida.


Descartas la mejor respuesta como inaceptable.

Tu pregunta es "Quiero un sistema de álgebra computacional gratuito que pueda usar en Python".

La respuesta es "SAGE hace eso".

¿Has mirado maxima / macsyma? SAGE proporciona enlaces para él, y ese es uno de los más libres.

http://maxima.sourceforge.net/


Intente aplicar el método de Bisección en py para encontrar la raíz dado un intervalo:

def f(x, rhs): # f(x) = e^x return math.e ** x - rhs # e^x = rhs -> e^x - rhs = 0 def solve(rhs, a = 0, b = 100, tol = 1e-3): while True: c = (a + b) / 2.0 if(f(a, rhs) * f(c, rhs) > 0): a = c else: b = c if(abs(f(c, rhs)) < tol): break return c y = math.e ** 3.75 # x = 3.75 print(solve(y)) # 3.7499..



No creo que haya una manera unificada de tratar las ecuaciones tanto lineales como cuadráticas (o generalmente no lineales) simultáneamente. Con los sistemas lineales, python tiene enlaces a álgebra lineal y paquetes matriciales. Los problemas no lineales tienden a resolverse caso por caso.


Para obtener soluciones inexactas, lea sobre programación lineal y optimización cuadrática secuencial , luego busque las bibliotecas de Python que realizan tales optimizaciones para usted.

Si las ecuaciones requieren soluciones enteras, debe buscar solucionadores de ecuaciones diofánticas para Python.

Solo tenga en cuenta que al usar un solucionador simple para el Proyecto Euler falta el punto. ¡La parte divertida y educativa es aprender a resolverlo usted mismo utilizando métodos primitivos!


Para referencia: la solución de Wolfram Alpha :

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

En python, usando el módulo de resolución de sympy (tenga en cuenta que asume que todas las ecuaciones se establecen en cero):

>>> 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))]

Y, por supuesto, a! = 1000, como a-1000 es el denominador de las dos ecuaciones.


Pensándolo bien, analicé Sage en detalle y claramente es el mejor software gratuito de matemáticas disponible.

Solo algunas de las diferentes bibliotecas relacionadas con Python Math que integra son absolutamente increíbles.

Paquetes matemáticos contenidos en 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

Otros paquetes contenidos en 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


Un servicio web gratuito para resolver sistemas a gran escala de ecuaciones no lineales (1 millón +) es APMonitor.com. Hay una interfaz de navegador y una API para Python / MATLAB. La API a Python es un solo script (apm.py) que está disponible para descargar desde la página de inicio de apmonitor.com. Una vez que el script se carga en un código Python, le da la capacidad de resolver problemas de:

  • Ecuaciones no lineales
  • Ecuaciones diferenciales y algebraicas.
  • Ajuste de modelo de cuadrados mínimos
  • Estimación de horizonte móvil
  • Modelo no lineal de control predictivo.
  • etc.

Para el nuevo usuario, el software APM Python tiene un foro de Grupos de Google donde un usuario puede publicar preguntas. Hay seminarios web quincenales que muestran problemas de optimización en la investigación de operaciones e ingeniería.

A continuación se muestra un ejemplo de un problema de optimización (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

El problema de optimización se resuelve con la siguiente secuencia de comandos de Python:

# 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


Usaría Octave para esto, pero estoy de acuerdo, la sintaxis de Octave no es lo que llamaría emocionante (y los documentos siempre me confunden más de lo que ayudan, también).


sympy es exactamente lo que estás buscando.