用python求解含未知数式子出现问题
from sympy import *
t,n,k,g,w,r,a,e,b=symbols('t,n,k,g,w,r,a,e,b')
f1=(1-t)n**ake*gb-wn-rk
dn=diff(f1,n)
print("dn=",dn)
dk=diff(f1,k)
print("dk=",dk)
dn= ag**bke*na*(1 - t)/n - w
dk= eg**bke*na*(1 - t)/k - r
m=solve([dn,dk],[n,k])
print(m)
dn= ag**bke*na*(1 - t)/n - w
dk= eg**bke*na*(1 - t)/k - r
Traceback (most recent call last):
File "D:\python\venv\1.py", line 10, in
m=solve([dn,dk],[n,k])
File "D:\python\venv\lib\site-packages\sympy\solvers\solvers.py", line 1108, in solve
solution = _solve_system(f, symbols, flags)
File "D:\python\venv\lib\site-packages\sympy\solvers\solvers.py", line 1972, in _solve_system
raise NotImplementedError('could not solve %s' % eq2)
NotImplementedError: could not solve e*gbn**a(1 - t)((-n(1 - a)w/(ag**b(t - 1)))(1/e))(e - 1) - r
你的等式是什么?比如说 (1-t)n*akegb-wn-rk 里面没有加 * 的也表示乘法嘛
from sympy import *
t,n,k,g,w,r,a,e,b=symbols('t,n,k,g,w,r,a,e,b')
f1=(1-t)*n**(a*k*e)*(g*b-w*n-r*k)
dn=diff(f1,n)
print("dn=",dn)
dk=diff(f1,k)
print("dk=",dk)
dn= (a*g)**(b*k*e)*(n*a)*(1 - t)/n - w
dk= (e*g)**(b*k*e)*(n*a)*(1 - t)/k - r
m=solve([dn,dk],[n,k])
print(m)
当您遇到无法通过操纵符号(解析地解决)来解决方程式的问题时,仍然有可能通过尝试不同的数字并获得(或非常接近)正确答案来解决(数值求解)。
您可以将sympy解决方案转换为基于numpy的函数,并使用scipy进行数值求解。
from sympy import lambdify
from scipy.optimize import fsolve
func_np = sp.lambdify(x, diff((1-exp(-x))**x,x), modules=['numpy'])
solution = fsolve(func_np, 0.5)
这会将方程式解析为 0.69314718 ,这正是您所期望的。