Analitik Devamın Hayali Kısmının Gerçek Kısmdan Sayısal Olarak Kurtarılması


11

Benim durumum.

Karmaşık bir integralle tanımlanan karmaşık bir değişken fonksiyonum var f(z). İlgilendiğim şey, bu fonksiyonun hayali eksendeki değeridir. Bu işleve aşağıdaki şeritte sayısal erişimim var: z=(x,y)(,)×[1,1] . Resmi olarak integral ifade bu alanın dışında ıraksaktır ve bu nedenle analitik bir sürdürmeye ihtiyacım var. Bir resimdeki durumumu özetlemek gerekirse,

resim açıklamasını buraya girin

Sayısallardan bu şeritte hakkında bildiklerim f(z):

  1. Aynı anda hayali ve gerçek eksenler hakkında simetriktir.

  2. değerinde sıfıra düşer .Re(z)

  3. yakınında patlar . Kutup veya dallanma noktası olabilir, bilmiyorum. Bu tekilliğin doğasının (ve muhtemelen analitik devamın diğer tüm izole tekilliklerinin) bu işlevin spesifik parametrelendirmesine ξ bağlı olduğundan şüpheleniyorum (ayrıntılar için aşağıdaki integrale bakın)z=±iξ

Aslında , çizildiğinde bir veya 1 / ( 1 + z 2 ) 2 n'ye çok benzemektedir . İşte gerçek kısmın bir çizimi:sech2(z)1/(1+z2)2n

resim açıklamasını buraya girin

Benim sorum, fonksiyon hakkında sahip olduğum bilgi miktarına göre (o şeritteki toplam sayısal erişim), hayali eksen boyunca bu fonksiyona yaklaşık olarak sayısal bir hesaplama yapmamın bir yolu var mı? Bu arada Mathematica kullanıyorum.

Hayali eksen boyunca değerlerle ilgilenmemin nedeni, bu işlevin aşağıdaki Fourier dönüşümünü değerlendirmem gerektiğidir:

(1)f¯(t)=dxeitx1x2+x02f(x)

benim durumumda aslında 10 civarında olan büyük değerleri için . Her ne kadar integrali iyi bilsem de, bu Fourier dönüşümü müthiş bir şekilde salınımlıdır, bu yüzden bunu nasıl hesaplayacağımı bilmenin diğer tek yolu bir Kontur entegrasyonudur.t10


Ne Denedim.

  1. Aslında nihai yüksek salınımlı integrali, eq hesaplamaya çalıştım. (1). Denk. (1) tek bir 't' değerinin hesaplanması birkaç saat sürer. Bu integrallerden birkaçını zaten yaptım ve sonuçlar gerçekten mantıklı, ancak alternatif bir yaklaşım istiyorum.

  2. Analitik olarak Pade yaklaşımları ile devam etmeyi denedim, ancak bu aynı zamanda hesaplama açısından da pahalı, ancak doğrudan değerlendirme kadar değil. Daha da önemlisi, gibi basit işlevlere sahip testlerimin nasıl gittiğine ( aksine çok hızlı bir şekilde ulaşabilirim ) tersine, artan sıralarla (ya da kısmi toplamlarının ortalaması!) Yakınsama kuramadım. basit test fonksiyonları ile karmaşık z- düzleminin geniş aralıklarında yakınsaklık ).sech2(z)z

  3. Boşuna sembolik entegrasyonu denedim. İntegrandü Mathematica için daha sindirilebilir bir forma masaj yapmaya çalıştım, ancak girişimlerim başarılı olmadı.


Sorun yaratan integral.

Let , k , Karsılık ve a ise pozitif reel sayılar olmak E biz ilgilendiğiniz karmaşık sayı (rolünü oynar z önceki tartışmada). Tanımlamak:k4kξαEz

p12=(k4+12E)2+k2+α2p22=(k412E)2+k2+(1α)2

İlgilendiğim integral şu:

f(E;α,ξ)=dk40d(k2)[α(1+p12)3ξ/2(1+p22)ξ/2(1+p12(1+p12)2ξ)(1+p22(1+p22)2ξ)++(p1p2)]

kısaca özde fonksiyonel bağımlılık gösterimini bastırdım. Özellikle değerleri ilgilendiğim , aralık 0 < α < 1 (yukarıda belirtildiği gibi), ve Fourier (1) dönüşümü t 10 .ξ=1,2,30<α<1t 10


Burada sayısal analitik devam kesinlikle yardımcı oluyor mu? Bunun yerine + f integralinin katlanarak çürüyeceği ancak f'nin doğrudan kullanılabildiği boyunca değerlendirebilir misiniz ? Ayrıca, salınımlı integralin değerlendirilememesi de şaşırtıcıdır, çünkü genellikle salınımlı integraller için özel yöntemler f gibi hızlı bir şekilde polinom olarak bozunma fonksiyonunu işleyebilecektir . Bunu söylüyorum çünkü Mathematica'daki integral ile oynadıktan sonra sayısal analitik devamın kör bir sokak olabileceğinden endişeliyim. R+0.99if¯ff
Kirill

1
İntegrali doğrudan Mathematica'da uygulamaya çalıştım ve dizüstü bilgisayarımda 20'li yıllarda değerini değerlendirdim : harika değil, aynı zamanda saat değil. Doğrudan nasıl değerlendirileceğine dair bir cevap yazsaydım size yardımcı olur mu? f¯
Kirill

f¯f¯α[1,2]0.1

Bunu yazdım, ama kodumla ilgili bir sorun keşfettim, bu yüzden artık hesapladığım şeyin geçerli olup olmadığından emin değilim. Bilinen geçerli referans değerleriniz var mı?
Kirill

Yanıtlar:


5

Not: Bu noktada Mathematica'nın bana verdiği integral değerlerin sahte olduğu konusunda biraz endişeliyim. Çalıştığını düşündüm çünkü kısa sürede mantıklı görünümlü bir sonuç verdi, ancak kullanmaya çalıştığı yöntemin hatalı olması veya yanlış bir şey yapmam olabilir. Bu yüzden aşağıdaki kod hiç çalışmıyor olabilir, bilmiyorum, üzgünüm.

Not 2: Beni rahatsız etti, bu yüzden Julia ve GSL kullanarak başka bir sürüm ( burada kod , kod kalitesi için üzgünüm) yazdım ve gMathematica'nın aşağıda verdiği aynı cevaba 2 saniye içinde değerlendiriyor . Bu yüzden kod muhtemelen iyi olduğunu düşünüyorum.

ff¯

Sayısal entegrasyonla ilgili geçmiş deneyimim, meraklısı matematiksel yöntemlerin bazen olağanüstü derecede yararlı olabileceğine inanmamı sağlıyor, ancak aynı zamanda sayısal Fourier dönüşümlerini değerlendirmenin ve rasyonel ve cebirsel fonksiyonları entegre etmenin sayısal entegrasyon algoritmalarının ekmek ve tereyağı olduğunu da düşünüyoruz. algoritmaları dikkatle seçerek ve parametreleriyle oynayarak kolay ilerleme kaydedebilirsiniz. Matematiksel tekniğin nasıl düzgün çalıştığını görmek zorsa, bu genellikle daha kolay bir seçenektir.

ClearAll[ξ, α, p1, p2, fi, f, g];
ξ = 1;
α = 1/2;
fi[e_, k4_, kp_] := Module[{
   p1 = (k4^2 + e/2)^2 + kp^2 + α^2,
   p2 = (k4^2 - e/2)^2 + kp^2 + (1 - α)^2},
  2 * (* because integrate k4 over (0,∞) *)
   2 kp * (* because d(kp^2) *)
   (α (1 + p1)^(3 ξ/2) (1 + p2)^(ξ/2)) /
     ((1 + p1 (1 + p1)^(2 ξ)) (1 + p2 (1 + p2)^(2 ξ)))
  ]
f[e_?NumericQ] := NIntegrate[
   fi[e, k4, kp], {k4, 0, ∞}, {kp, 0, ∞},
   Method -> {Automatic, "SymbolicProcessing" -> 0}];

(* !!! This gives a bogus result: *)
gBogus[t_?NumericQ, e0_?NumericQ] := 
 NIntegrate[
  Exp[I t e]/(e^2 + e0^2) f[e], {e, -∞, ∞}, 
  Method -> {"DoubleExponentialOscillatory", 
    "SymbolicProcessing" -> 0}]

(* This gives *a* result, different from above despite being equivalent *)
g[t_?NumericQ, e0_?NumericQ] := 
 NIntegrate[Exp[I t e]/(e^2 + e0^2) f[e], {e, -\[Infinity], 0}, 
   Method -> {"DoubleExponentialOscillatory", 
     "SymbolicProcessing" -> 0},
   EvaluationMonitor :> Print["e=", e]] +
  NIntegrate[Exp[I t e]/(e^2 + e0^2) f[e], {e, 0, \[Infinity]}, 
   Method -> {"DoubleExponentialOscillatory", 
     "SymbolicProcessing" -> 0},
   EvaluationMonitor :> Print["e=", e]]

Sonuç:

In[18]:= Timing@g[10,1]
Out[18]= {78.0828, 0.0000704303 + 9.78009*10^-6 I}

In[338]:= Timing@g[1,1]
Out[338]= {14.3125,0.389542 +0.024758 I}

Mathematica'yı integralleri sembolik olarak ön işlemeye sıfır zaman harcadım, çünkü bu durumda zaten bu konuda yararlı bir şey bulamazdı. Ayrıca ikinci integral için bir salınımlı kareleme yöntemi kullanmasını söyledim.

Rastgele entegrasyon stratejileri (bakınız kurcalıyor niçin Benim tahminim NIntegrateIntegrationStrategies ) çalışır hiç yapmam sormak şey biraz idare eder, eğer anlamlı hatta bit en az ise bazen Mathematica yanlışlıkla performans öldürme, otomatik kötü bir strateji seçim olabilir olmasıdır. Ayrıca https://mathematica.stackexchange.com adresinden yardım almayı düşünebilirsiniz , Mathematica'nın içindeki iç kısımlar hakkında daha fazla bilgi sahibi olabilirler.


k40g[t,e0]

@ArturodonJuan öğesinin simetrik olduğundan emin misiniz?fEp1p2EEk42×(0,)

p1p2Ep1,2k4

@ArturodonJuan Cevabın nasıl çalıştığı konusunda gerçek bir fark yaratmadığını düşünüyorum, sadece sayılar değişecekti.
Kirill
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.