2013-10-09 7 views
10

मैं अभिन्न संख्यानुसार का उपयोग कर अजगर को सुलझाने हूँ:पायथन: एक अभिन्न की प्रमुख मूल्य का पता लगाएं संख्यानुसार

enter image description here

जहां एक (एक्स) किसी भी मूल्य पर ले जा सकते हैं; सकारात्मक, नकारात्मक, [-1; 1] के अंदर या बाहर और ईटा एक infinitesimal सकारात्मक मात्रा है। एक दूसरे बाहरी अभिन्न जिनमें से

मैं हल करने के लिए इस Sokhotski–Plemelj theorem का उपयोग कर कोशिश कर रहा हूँ की एक (एक्स) मूल्य परिवर्तन किए गए है: enter image description here

हालांकि इस सिद्धांत को मूल्य का निर्धारण शामिल है जो मैं नहीं कर सकता पाइथन में कोई विधि पाएं। मुझे पता है कि यह मैटलैब में लागू किया गया है, लेकिन क्या किसी को भी लाइब्रेरी या पायथन में मूल मूल्य निर्धारित करने का कोई अन्य तरीका पता है (यदि कोई सिद्धांत मान मौजूद है)?

+0

MATLAB में इसे कैसे कार्यान्वित करें? – kyle

+0

MATLAB में प्रतीकात्मक एकीकरण "int" मूल मानों को संभाल सकता है: http://se.mathworks.com/help/symbolic/int.html अन्यथा संख्यात्मक इंटीग्रेटर "अभिन्न" अंतराल पर एकवचन को भी संभाल सकता है। तो आप दो में अभिन्न अंग को एकवचन जोड़ सकते हैं और फिर दो परिणाम जोड़ सकते हैं: http://se.mathworks.com/help/matlab/ref/integral.html?searchHighlight=integral –

उत्तर

5

आप सीधे अभिन्न का मूल्यांकन करने के लिए सिम्पी का उपयोग कर सकते हैं। eta-> 0 के साथ इसका असली भाग प्रमुख मूल्य है:

from sympy import * 
x, y, eta = symbols('x y eta', real=True) 
re(integrate(1/(x - y + I*eta), (x, -1, 1))).simplify().subs({eta: 0}) 
# -> log(Abs(-y + 1)/Abs(y + 1)) 

मैटलैब का प्रतीकात्मक टूलबॉक्स int आप एक ही परिणाम देता है, निश्चित रूप से (मैं इस के लिए Matlab में अन्य संबंधित उपकरणों के बारे में पता नहीं कर रहा हूँ --- कृपया निर्दिष्ट करें कि क्या आप एक विशिष्ट जानते हैं)।

आपने एक मूल मूल्य की संख्यात्मक गणना के बारे में पूछा। जवाब यह है कि यदि आपके पास केवल f(y) फ़ंक्शन है जिसका विश्लेषणात्मक रूप या व्यवहार आप नहीं जानते हैं, तो उन्हें संख्यात्मक रूप से गणना करना सामान्य रूप से असंभव है। आपको चीजों को जानने की जरूरत है जैसे कि इंटीग्रैंड के ध्रुव कहां हैं और वे किस क्रम में हैं।

आप दूसरी तरफ पता है कि आपके अभिन्न रूप f(y)/(y - y_0) का है, तो scipy.integrate.quad आप के लिए प्रिंसिपल मूल्य की गणना कर सकते हैं, उदाहरण के लिए:

import numpy as np 
from scipy import integrate, special 

# P \int_{-1}^1 dx 1/(x - wvar) * (1 + sin(x)) 
print(integrate.quad(lambda x: 1 + np.sin(x), -1, 1, weight='cauchy', wvar=0)) 
# -> (1.8921661407343657, 2.426947531830592e-13) 

# Check against known result 
print(2*special.sici(1)[0]) 
# -> 1.89216614073 

जानकारी के लिए here देखें।

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