Simbol sympy Python
Ketika saya menggunakan "x" dan "z" sebagai simbol, saya tidak punya masalah dengan kode ini:
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})
Tetapi ketika saya menggunakan "q" dan "a", penyelesaian tidak memberi saya solusi apa pun.
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})
Seperti yang Anda lihat, saya menggunakan "subs" untuk memeriksa bahwa tidak ada kesalahan ketik dalam fungsi objektif.
UPDATE: Saya menggunakan "Simbol" untuk mengatur setiap variabel secara individual, tetapi sekali lagi menggunakan "q" dan "a" tidak berfungsi.
# 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)))
Terima kasih.
Jawaban
Oke!
Itu semua tergantung pada urutan abjad variabel Anda.
Jika Anda mengganti xuntuk zdan zuntuk xdi contoh pertama Anda juga akan berhenti bekerja.
Internal memecahkan mengirimkan ekspresi untuk fungsi _solvedi sympy.solversmana kemudian mencoba untuk memecahkan persamaan dan gagal berkali-kali.
Akhirnya sebagai upaya terakhir yang dilakukannya adalah mencoba untuk memecahkan -sqrt(a) + qatau x - sqrt(z)dengan mengambil simbol darinya melalui fungsi internal _ok_syms, dengan argumen yang mengurutkan mereka menurut abjad (bahkan tanpa argumen ini tetap akan, tetapi jika dibungkus dengan reverseditu secara ajaib membuat contoh Anda berfungsi dengan cara yang berlawanan).
Dan itu memecahkan x - sqrt(z)sebagai x: sqrt(z)dan -sqrt(a) + qsebagai a: q**2.
Sementara dalam kasus pertama berakhir dengan mudah dipecahkan 50 - 10*sqrt(z), dalam kasus kedua hilang -12*q + 2*sqrt(q**2) + 50karena tidak dapat disederhanakan sqrt(q**2).
sumber: banyak pengujian pada: https://github.com/sympy/sympy/blob/master/sympy/solvers/solvers.py