首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用渐近来求解这两个方程?

如何使用渐近来求解这两个方程?
EN

Stack Overflow用户
提问于 2019-08-19 21:19:00
回答 2查看 56关注 0票数 0

我不能用渐近解这两个方程。

代码语言:javascript
复制
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节)

EN

回答 2

Stack Overflow用户

发布于 2019-08-20 00:41:40

我不知道为什么solve不能在这里工作。这些方程在x和y中的每一个都是立方的,因为它们是非退化的,这意味着我认为最多可能有9个根。我可以通过求解x的eq1,从eq2中消除x,然后求解y的eq2来找到它们。

代码语言:javascript
复制
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)]

其中一些根的完整表达式很复杂,因为它们来自三次公式。我将显示近似数值:

代码语言:javascript
复制
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检查这些根失败,因此我将演示它们可能是数值解决方案:

代码语言:javascript
复制
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]
票数 0
EN

Stack Overflow用户

发布于 2019-08-21 03:23:52

Oscar推荐的过程可以通过使用"manual=True,check=False“标志自动完成:

代码语言:javascript
复制
>>> 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]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57557580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档