Python sympy sembolleri

Nov 01 2020

Sembol olarak "x" ve "z" kullandığımda, bu kodla ilgili bir sorunum yok:

from sympy import *
x, z = symbols('x z')
y = -6*x**2 + 2*x*z**0.5 + 50*x - z
solve((diff(y, x), diff(y, z)))
y.subs({x: 5, z: 25})

Ama "q" ve "a" kullandığım zaman, çözme bana herhangi bir çözüm vermiyor.

q, a = symbols('q a')
y = -6*q**2 + 2*q*a**0.5 + 50*q - a
solve((diff(y, q), diff(y, a)))
y.subs({q: 5, a: 25})

Gördüğünüz gibi, amaç işlevinde yazım hatası olup olmadığını kontrol etmek için "subs" kullanıyorum.

GÜNCELLEME: Her değişkeni ayrı ayrı ayarlamak için "Sembol" kullandım, ancak yine "q" ve "a" kullanmak çalışmıyor.

# This works
x = Symbol('x')
z = Symbol('z')
y = -6*x**2 + 2*x*z**0.5 + 50*x - z
solve((diff(y, x), diff(y, z)))

# This does not work
q = Symbol('q')
a = Symbol('a')
y = -6*q**2 + 2*q*a**0.5 + 50*q-a
solve((diff(y, q), diff(y, a)))

Teşekkür ederim.

Yanıtlar

5 Marcin Nov 02 2020 at 00:00

Anladım!

Her şey değişkenlerinizin alfabetik sırasına bağlıdır.

Eğer yerine ise xiçin zve ziçin xilk örnekte de çalışmayı durdurur.

Dahili olarak çözmek işleve ifadesini gönderir _solvede sympy.solverssonra denklemi çözmeye çalışır ve birçok kez başarısız olan.

Nihayet son bir çaba olarak ne yapar onu çözmeye çalışır olduğunu -sqrt(a) + qveya x - sqrt(z)bir iç işlevi aracılığıyla ondan sembolleri seçerek _ok_symsalfabetik (hatta hala olur bu argüman olmayanlar sıralar bağımsız değişkenle, fakat ile sarılı ise reversedo sihirli örnekler çalışır hale getirir tam tersi şekilde).

Ve böylece x - sqrt(z)as x: sqrt(z)ve -sqrt(a) + qas çözer a: q**2.

İlk durumda kolayca çözülebilir bir sonuçla sonuçlanırken 50 - 10*sqrt(z), ikinci durumda -12*q + 2*sqrt(q**2) + 50basitleştirilemediği için kaybolur sqrt(q**2).

kaynak: birçok test: https://github.com/sympy/sympy/blob/master/sympy/solvers/solvers.py