python答案错误_python – Sympy Solve()给出了错误的答案

作者在使用Python的Sympy库解决数学模型时遇到错误答案的问题。对比MATLAB的结果,发现Sympy在处理特定类型的方程时无法得到正确的解。经过一系列尝试,包括简化方程和手动提取分母,作者发现Sympy能够给出正确答案,但结果未被完全简化。更新提到,Sympy在扩展形式下给出了正确解,但不自动进行完全简化。文章讨论了Sympy的简化问题及其在求解过程中的表现。
摘要由CSDN通过智能技术生成

我正在使用sympy来处理一些数学模型,我发现由于某种原因,sympy.solve()给了我错误的答案.

import sympy as sm

p, WAA, WAa, Waa = sm.symbols( 'p, WAA, WAa, Waa' )

num = p**2*WAA + p*(1-p)*WAa

denom = p**2*WAA + 2*p*(1-p)*WAa + (1-p)**2*Waa

dipMod = sm.Eq( num / denom , p )

eq = sm.solve(dipMod, p)

print eq

结果应为0,1和(WAa-Waa)/(2WAa-WAA-Waa).我在MATLAB中解决了我的公式,给出了正确的答案.

有趣的是,sympy正确地解决了一个更简单的方程式:

hapMod = sm.Eq( WAA*p / (WAA*p + Waa*(1-p)), p )

print sm.solve(hapMod, p)

这给出了0和1的解决方案.我做错了什么或者是否有解决的错误?如果可能的话,我想坚持使用Python,而不是切换到MATLAB.

更新:

我又遇到了这个问题:

p, WA, Wa = sm.symbols('p, WA, Wa')

hapMod = sm.Eq( p*WA / (p*WA + (1-p)*Wa) , p )

hapModEq = sm.solve( hapMod, p )

给出正确的答案.但代入WA和Wa代替

hapMod2 = hapMod.subs( [(WA, 1+a*(1-p)), (Wa, 1+B*p)], simultaneous=True )

hapMod3 = sm.simplify(hapMod2)

print hapMod3

hapMod3Eq = sm.solve(hapMod3, p)

再次给出错误的答案. MATLAB给出了正确答案0,1,a /(B a).我发现如果我从分母中取出多项式并求解

test = sm.Eq( p*(a*p - a - 1)/(B*p - B*p + a*p - a*p - 1), p )

print sm.solve(test, p)

它工作得很好.是否有关于多项式分母抛出同情的东西?

更新更新

搞砸了之后,我发现同情心正在给出正确的答案,但是将它们留在一个奇怪的扩展形式中,如

(B + 2*a)/(2*(B+a)) + sqrt(B**2)/(-2*B - 2*a).

这简化为正确的a /(B a),但是当呈现均衡时或当明确要求分别简化该等式时,同情不会简化它.所以它似乎更像是简化问题而不是解决问题.毕竟它正确解决了.同情似乎很奇怪,同情会留下类似的东西

sqrt(B**2) or sqrt( (WAA - WAa)**2)

没有简化为B或(WAA – WAa).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值