我不能用渐近解这两个方程。
eq1 = 20*x*y-10*x-4*x**3
eq2 = 10*x**2-8*y-8*y**3
solve([eq1, eq2], [x, y])我的答案是(0,0),(0,-i),(0,i),但书中的答案是(0,0),(+-2.64,1.90),(+-0.86,0.65)。本书是微积分,第6版,詹姆斯·斯图尔特(15-7节)
发布于 2019-08-20 00:41:40
我不知道为什么solve不能在这里工作。这些方程在x和y中的每一个都是立方的,因为它们是非退化的,这意味着我认为最多可能有9个根。我可以通过求解x的eq1,从eq2中消除x,然后求解y的eq2来找到它们。
In [101]: sols = [{x: xi.subs(y, yi), y:yi} for xi in solve(eq1, x) for yi in solve(eq2.subs(x, xi), y)]其中一些根的完整表达式很复杂,因为它们来自三次公式。我将显示近似数值:
In [102]: for s in sols: print('(%s, %s)' % (s[x].n(3, chop=True), s[y].n(3, chop=True)))
(0, 0)
(0, -1.0*I)
(0, 1.0*I)
(-0.857, 0.647)
(-2.64, 1.90)
(-3.9*I, -2.54)
(0.857, 0.647)
(2.64, 1.90)
(3.9*I, -2.54)对于(+-3.9*I,-2.54)根,使用simplify或checksol检查这些根失败,因此我将演示它们可能是数值解决方案:
In [103]: [eq1.evalf(subs=s, chop=True) for s in sols]
Out[103]: [0, 0, 0, 0, 0, 0, 0, 0, 0]
In [104]: [eq2.evalf(subs=s, chop=True) for s in sols]
Out[104]: [0, 0, 0, 0, 0, 0, 0, 0, 0]发布于 2019-08-21 03:23:52
Oscar推荐的过程可以通过使用"manual=True,check=False“标志自动完成:
>>> sol = solve((eq1,eq2), check=False, manual=True)
>>> [eq1.subs(s).n(2,chop=True) for s in sol]
[0, 0, 0, 0, 0, 0, 0, 0, 0]
>>> [eq2.subs(s).n(2,chop=True) for s in sol]
[0, 0, 0, 0, 0, 0, 0, 0, 0]https://stackoverflow.com/questions/57557580
复制相似问题