2016-11-25 7 views
5

मैं, पहले के आदेश इसमेरा सिम्पी कोड पहले ऑर्डर की गणना क्यों करता है टेलर श्रृंखला अनुमान गलत तरीके से?

sympy expression

जो Sympy में (इस सवाल में एक प्रतिलिपि प्रस्तुत करने योग्य उदाहरण के लिए) इस तरह दर्ज किया गया है की तरह एक अभिव्यक्ति

from sympy import * 
expression = Add(Mul(Integer(-1), Float('0.9926375361451395', prec=2), Add(Mul(Float('0.33167082639756074', prec=2), Pow(Symbol('k1'), Float('-0.66666666666666674', prec=2)), Pow(Symbol('n1'), Float('0.66666666666666674', prec=2))), Mul(Float('0.97999999999999998', prec=2), exp(Mul(Integer(-1), Symbol('mu1'))))), Pow(Add(Mul(Float('0.97999999999999998', prec=2), Symbol('k1'), exp(Mul(Integer(-1), Symbol('mu1')))), Mul(Integer(-1), Symbol('k2')), Mul(Pow(Symbol('n1'), Float('0.66666666666666674', prec=2)), Pow(Mul(Symbol('k1'), exp(Mul(Integer(-1), Symbol('mu1')))), Float('0.33333333333333331', prec=2)))), Integer(-1))), Pow(Add(Mul(Float('0.97999999999999998', prec=2), Symbol('k0'), exp(Mul(Integer(-1), Symbol('mu0')))), Mul(Integer(-1), Symbol('k1')), Mul(Pow(Symbol('n0'), Float('0.66666666666666674', prec=2)), Pow(Mul(Symbol('k0'), exp(Mul(Integer(-1), Symbol('mu0')))), Float('0.33333333333333331', prec=2)))), Integer(-1))) 

इस अभिव्यक्ति eyeballing है किसी भी चर के लिए टेलर सन्निकटन, उदाहरण के लिए k1, आसपास कुछ अशून्य मूल्य शून्य नहीं होनी चाहिए, लेकिन इस कोड

x = symbol("x") 
expression.series(k1, x0 = x, n = 1) 

सिर्फ रिटर्न 0। यह एक समस्या है क्योंकि मैं (अंततः) एक बहुविकल्पीय टेलर श्रृंखला सन्निकटन की गणना कर रहा हूं, इसी तरह से this answer पर, और यदि श्रृंखला विस्तार में से एक गलती से शून्य का मूल्यांकन करता है, तो पूरी चीज टूट जाती है।

क्या मैंने कुछ गलत कोड किया है, या मेरा मूल कैलकुलेशन बस इतना बुरा है और यह वास्तव में शून्य का मूल्यांकन करता है? documentation on series से, मैं काफी निश्चित हूं कि मैं इसे सही तरीके से उपयोग कर रहा हूं।

उत्तर

4

मुझे लगता है कि यह अतिरिक्त ऑपरेशन ऑर्डर करने के तरीके से संबंधित एक बग है।

यह बग तभी लागू होता है जब आप टेलर श्रृंखला के शून्य क्रम (एन = 1) की गणना कर रहे हों। यह बचने के लिए आप क्या कर सकते हैं

next(expression.series(k1, x0=x, n=None)) 

जो

expression.subs(k1, x0=x) 

यहाँ के बराबर है इस बग का एक सरल वर्णन है: में

from sympy import cos 
from sympy.abc import x 
cos(x).series(x, x0=1, n=2) 

परिणाम

cos(1) - (x - 1)*sin(1) + O((x - 1)**2, (x, 1)) 

लेकिन

cos(x).series(x, x0=1, n=1) 

में cos(1) + O(x - 1, (x, 1)) के बजाय परिणाम।

एक बग से इस बग परिणामों में 1 + O(x - 1, (x, 1)) के बजाय O(x - 1, (x, 1)) में

O(x).subs(x,x-1) + 1 

परिणाम जोड़ें।

+0

ऐसा लगता है कि यह बग SymPy के गिट मास्टर संस्करण में तय है। वहां, 'ओ (एक्स) .subs (x, x-1) + 1' '1 + O (x - 1, (x, 1)) देता है, और प्रश्न में श्रृंखला' ओ (k₁ - x; k₁ → x) '। – asmeurer

संबंधित मुद्दे