2013-10-09 16 views
10
Ben ayrılmaz sayısal kullanarak piton çözüyorum

:Python: ayrılmaz bir temel değerini bulun sayısal

enter image description here

nerede bir (x) herhangi bir değeri alabilir; Pozitif, negatif, iç veya dış [1; 1] ve eta, sonsuz pozitif bir miktardır. Bir (x) değerini bu Sokhotski–Plemelj theorem kullanarak çözmeye çalışıyorum

değiştirir ikinci dış ayrılmaz vardır: Ancak bu prensip değeri, önceden tespit ederek ve enter image description here

hangi Yapamam Python'da herhangi bir yöntem bulmak. Matlab'da uygulandığını biliyorum, fakat herhangi bir kütüphaneyi ya da pythonda temel değerin belirlenmesinin başka bir yolunu bilen var mı (eğer temel bir değer varsa)?

+0

MATLAB'da nasıl uygulanır? – kyle

+0

MATLAB'da sembolik entegrasyon "int" temel değerleri işleyebilir: http://se.mathworks.com/help/symbolic/int.html Aksi takdirde sayısal entegratör "integral" uç noktalardaki tekillikleri de işleyebilir. Böylece, integrali ikiye ayırıp tekilliği tam olarak ekleyebilir ve ardından iki sonucu ekleyebilirsiniz: http://se.mathworks.com/help/matlab/ref/integral.html?searchHighlight=integral –

cevap

5

Entegrali doğrudan değerlendirmek için semion kullanabilirsiniz. ---

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)) 

Matlab'ın sembolik araç int, sana aynı sonucu verir elbette (Bunun için Matlab diğer ilgili araçlar farkında değilim edin: eta-> 0 ile Onun gerçek kısmı anapara değerdir Belirli bir tanesini biliyorsanız belirtin).

Bir temel değerin sayısal hesaplamasını sordunuz. Cevabınız, analitik formu veya bilmediğiniz davranışları olan sadece f(y) numaralı bir işleve sahipseniz, bunları sayısal olarak hesaplamak imkansızdır. İntegralın kutuplarının nerede olduğu ve hangi sırayla olduklarını bilmeniz gerekir.

diğer taraftan da ayrılmaz formu f(y)/(y - y_0) ait olduğunu biliyorsanız, scipy.integrate.quad örneğin, sizin için asıl değerini hesaplayabiliriz:

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 

Detaylar için here bakınız.