2017-06-04 12 views
0

私は解決しようとしている方程式を持っています。私はSymPyライブコンソールで適切な結果を得ています。これはウェブサイトで入手できます。しかし、私のローカルコンピュータで同じ結果を再現しようとしているとき、私はConditionSetを得ています。私は方程式を解くことができません。ローカルとSymPyのライブ結果が異なる - 部門の問題?

正確に同じ方程式を局所的に解くことはできません。私はdiv(もし私が__future__.divisionをインポートしています)、LaTexライブラリの欠如、またはいくつかの他の設定が何か間違っているかどうか確かではありませんか?ラテックスで印刷

Python console for SymPy 1.0 (Python 2.7.12) 

These commands were executed: 
>>> from __future__ import division 
>>> from sympy import * 
>>> x, y, z, t = symbols('x y z t') 
>>> k, m, n = symbols('k m n', integer=True) 
>>> f, g, h = symbols('f g h', cls=Function) 

Warning: this shell runs with SymPy 1.0 and so examples pulled from other documentation may provide unexpected results. 
Documentation can be found at http://docs.sympy.org/1.0. 

>>> a = Eq(309.07*(1+x)**(-1/12) + 309.07*(1+x)**(-2/12)+309.07*(1+x)**(-3/12) + 309.07*(1+x)**(-4/12) + 309.07*(1+x)**(-5/12) + 309.07*(1+x)**(-6/12) + 309.07*(1+x)**(-7/12), 1500) 
>>> solveset(a, x, domain=S.Reals) 

結果:

  {2.17102109654962} 

そして、ここで地元のPythonスクリプト:ASCIIテキストで印刷

from __future__ import division                                        
from sympy import *                                           

init_printing()                                            

x, y, z, t = symbols('x y z t')                                        
k, m, n = symbols('k m n', integer=True)                                      
f, g, h = symbols('f g h', cls=Function)                                      

a = Eq(309.07*(1+x)**(-1/12) + 309.07*(1+x)**(-2/12)+309.07*(1+x)**(-3/12) + 309.07*(1+x)**(-4/12) + 309.07*(1+x)**(-5/12) + 309.07*(1+x)**(-6/12) + 309.07*(1+x)**(-7/12), 1500)   
b = solveset(a, x, S.Reals)                                         

print b 

の検索結果をここで

はSymPyからのコマンドが住んでいます:

ConditionSet(x, Eq(309.07*(x + 1)**(-0.583333333333333) + 309.07*(x + 1)**(-0.5) + 309.07*(x + 1)**(-0.416666666666667) + 309.07*(x + 1)**(-0.333333333333333) + 309.07*(x + 1)**(-0.25) + 309.07*(x + 1)**(-0.166666666666667) + 309.07*(x + 1)**(-0.0833333333333333) - 1500, 0), (-oo, oo)) 

私はその後、私は違う行動を起こすかわからないですが、あなたはsympy整数として、あなたの指数を治療するためのsympyを言うならば...私はこの上の任意の助けをいただければ幸いです

+0

おそらく、Sympy Liveは、Sympyの開発版を使用していますか?どちらの場合でも、 'solveset'の代わりに' solve'を使うと、必要な答えが得られます。しかし、数値解を探しているときには、(同じ)結果をより速く与えるので、 'nsolve'を使うのが最良の選択肢です。 – Stelios

答えて

0

Python 2.7SymPy 1.0 を使用していますあなたはsymPyライブと同じ結果が得られます:

from __future__ import division                                        
from sympy import *                                           

init_printing()                                            

x, y, z, t = symbols('x y z t')                                        
k, m, n = symbols('k m n', integer=True)                                      
f, g, h = symbols('f g h', cls=Function)                                      

a = Eq(309.07*(1+x)**(-1/Integer(12)) + 309.07*(1+x)** (-2/Integer(12))+309.07*(1+x)**(-3/Integer(12)) + 309.07*(1+x)**(-4/Integer(12)) + 309.07*(1+x)**(-5/Integer(12)) + 309.07*(1+x)**(-6/Integer(12)) + 309.07*(1+x)**(-7/Integer(12)), 1500)   
b = solveset(a, x, S.Reals)                                         

print b 

Pythonの整数が、私は知りませんインストール現地でsympy整数のように扱われていない理由として。私にとっては、SymPy Liveが/オペレータをオーバーライドしているようです。この動作を明確にするには、ローカルインストールとSymPy Liveで

print(type(1/12)) 

を試してみてください。ローカル結果は<class 'float'>、SymPyライブ結果は<class 'sympy.core.numbers.Rational'>になります。

関連する問題