कठिन दोलन अभिन्न के संख्यात्मक एकीकरण के लिए विधि


25

मुझे नीचे दिए गए अभिन्न अंग का आंकलन करने की आवश्यकता है:

0sinc(xr)rE(r)dआर

जहाँ , और । यहाँ दूसरी तरह का संशोधित Bessel फ़ंक्शन है। मेरे विशेष मामले में मेरे पास , और ।एक्सआर+λ,κ,ν>0कश्मीरλ=.००,३१३κ=.००,८२५ν=0.33(आर)=आर4(λκ2+आर2)-ν-5/2कश्मीर-ν-5/2(λκ2+आर2)एक्सआर+λ,κ,ν>0कश्मीरλ=.००,३१३κ=.००,८२५ν=0.33

मैं MATLAB का उपयोग कर रहा हूं, और मैंने अंतर्निहित कार्यों की कोशिश की है integralऔर quadgk, जो मुझे बहुत सारी त्रुटियां देता है (नीचे देखें)। मैंने स्वाभाविक रूप से कई अन्य चीजों की कोशिश की है, जैसे कि भागों द्वारा एकीकृत करना, और से तक अभिन्न को ।( कश्मीर + 1 ) एक्स πकश्मीरएक्सπ(कश्मीर+1)एक्सπ

तो, क्या आपके पास कोई सुझाव है कि मुझे किस विधि के लिए अगला प्रयास करना चाहिए?

अद्यतन (जोड़े गए प्रश्न)
मैंने @Pedro से जुड़े पेपर को पढ़ा, और मुझे नहीं लगता कि इसे समझना बहुत कठिन था। हालाँकि, मेरे कुछ सवाल हैं:

  • क्या वर्णित मूल लेविन पद्धति में का उपयोग आधार-तत्वों रूप में करना ठीक होगा ?ψ kएक्सकश्मीरψकश्मीर
  • क्या मैं इसके बजाय सिर्फ एक फिलोन विधि का उपयोग कर सकता हूं, क्योंकि दोलनों की आवृत्ति तय हो गई है?

उदाहरण कोड
>> integral(@(r) sin(x*r).*sqrt(E(r)),0,Inf)
Warning: Reached the limit on the maximum number of intervals in use. Approximate
bound on error is 1.6e+07. The integral may not exist, or it may be difficult to
approximate numerically to the requested accuracy.
> In funfun\private\integralCalc>iterateScalarValued at 372
In funfun\private\integralCalc>vadapt at 133
In funfun\private\integralCalc at 84
In integral at 89

ans =

3.3197e+06


आपके अभिन्न अंग में क्या है ? एक्स
पेड्रो

कोई भी सकारात्मक, वास्तविक संख्या। मैंने अभी अपनी पोस्ट अपडेट की है।
टोरबोंड

यदि आप कुछ कोड और त्रुटियां दिखा सकते हैं, तो उनमें से अधिकांश को हल करना बहुत मुश्किल नहीं है। बेशक, कृपया पहले त्रुटि को ध्यान से पढ़ने की कोशिश करें और देखें कि क्या आप इसे अपने दम पर गायब कर सकते हैं।
डेनिस जहरुद्दीन

मैं कुछ कोड और त्रुटियों के साथ आज बाद में एक टिप्पणी करूंगा। या कल।
टोरबोंड

ठीक है, तो मैं भूल गया। लेकिन अब मैं एक उदाहरण (मैं की गणना के द्वारा दो में अभिन्न विभाजित है के साथ मेरी पोस्ट अद्यतन स्पष्ट रूप से)। रोंमैंnसी'
Torbonde

जवाबों:


12

मैंने अपना स्वयं का इंटीग्रेटर लिखा है quadcc, जो विलक्षणताओं के साथ मतलाब इंटीग्रेटर्स की तुलना में काफी बेहतर है, और एक अधिक विश्वसनीय डेटा अनुमान प्रदान करता है।

आपकी समस्या के लिए इसका उपयोग करने के लिए, मैंने निम्नलिखित कार्य किया:

>> lambda = 0.00313; kappa = 0.00825; nu = 0.33;
>> x = 10;
>> E = @(r) r.^4.*(lambda*sqrt(kappa^2 + r.^2)).^(-nu-5/2) .* besselk(-nu-5/2,lambda*sqrt(kappa^2 + r.^2));
>> sincp = @(x) cos(x)./x - sin(x)./x.^2;
>> f = @(r) sincp(x*r) .* r .* sqrt( E(r) );

फ़ंक्शन fअब आपका अभिन्न अंग है। ध्यान दें कि मैंने अभी कोई पुराना मान सौंपा है x

अनंत डोमेन पर एकीकृत करने के लिए, मैं चर का प्रतिस्थापन लागू करता हूं:

>> g = @(x) f ( tan ( pi / 2 * x ) ) .* ( 1 + tan ( pi * x / 2 ).^2 ) * pi / 2;

यानी एकीकृत g0 से 1 तक से एकीकृत रूप में एक ही होना चाहिए f0 से करने के लिए । अलग-अलग परिवर्तन अलग-अलग गुणवत्ता परिणाम उत्पन्न कर सकते हैं: गणितीय रूप से सभी परिवर्तनों को एक ही परिणाम देना चाहिए, लेकिन अलग-अलग परिवर्तनों से चिकनी, या अधिक आसानी से पूर्णांक उत्पन्न हो सकते हैं ।g

मैं तब अपने खुद के इंटीग्रेटर को कॉल करता हूं quadcc, जो NaNदोनों छोरों पर एस के साथ सौदा कर सकता है:

>> [ int , err , npoints ] = quadcc( g , 0 , 1 , 1e-6 )
int =
  -1.9552e+06
err =
   1.6933e+07
npoints =
       20761

ध्यान दें कि त्रुटि अनुमान बहुत बड़ा है, अर्थात quadccपरिणामों में बहुत अधिक विश्वास नहीं है। फ़ंक्शन को देखते हुए, हालांकि, यह आश्चर्यजनक नहीं है क्योंकि यह वास्तविक अभिन्न अंग के ऊपर परिमाण के तीन आदेशों पर निर्भर करता है। फिर से, एक अलग अंतराल के उपयोग से बेहतर परिणाम मिल सकते हैं।

आप इस तरह के और भी विशिष्ट तरीकों को देखना चाह सकते हैं । यह थोड़ा अधिक शामिल है, लेकिन निश्चित रूप से इस प्रकार की समस्या के लिए सही तरीका है।


आपका बहुत बहुत धन्यवाद। मैं विभिन्न तरीकों पर एक नजर डालूंगा। मेरे उद्देश्यों के लिए, त्रुटि को ईक में मानक के रूप में छोटा होने की आवश्यकता नहीं है integral(1e-10 मुझे लगता है), लेकिन 1.7e + 07 अभी भी वास्तव में, वास्तव में बहुत बड़ा है। जैसा कि आप उल्लेख करते हैं, शायद एक और परिवर्तन अच्छा करेगा।
टोरबोंड

@ cimrg.joe: ध्यान दें कि त्रुटि अनुमान एक पूर्ण त्रुटि का अनुमान है, जो दूसरों के बीच, एकीकृत के अधिकतम निरपेक्ष मूल्यों पर आधारित है। कुछ चरम मामलों में, लौटाया गया मूल्य वास्तव में काफी ठीक हो सकता है। यदि आप सटीकता के दस अंकों की तलाश कर रहे हैं, तो मैं दृढ़ता से लेविन-प्रकार के तरीकों का उपयोग करने की सलाह देता हूं जो मैंने अपनी पोस्ट के अंत में उल्लेख किया था।
पेड्रो

मुझे शायद सटीकता के दस अंकों की आवश्यकता नहीं है, लेकिन मुझे लगता है कि मुझे कम से कम पांच की आवश्यकता है। क्या आपका तरीका ऐसा हो सकता है?
टॉरबोंड

विधि इस बात की गारंटी नहीं दे सकती कि अंतराल के दाईं ओर के मान के बाद से आपके अभिन्न के लिए सटीक सटीकता, अभिन्न से बड़े परिमाण के कई आदेश हैं।
पेड्रो

11

जैसा कि पेड्रो बताते हैं, इन प्रकार की समस्याओं के लिए लेविन-प्रकार के तरीके सबसे अच्छे तरीके से स्थापित हैं।

क्या आपके पास गणितज्ञों तक पहुंच है? इस समस्या के लिए, गणितज्ञ डिफ़ॉल्ट रूप से उनका पता लगाएगा और उनका उपयोग करेगा:

In[1]:= e[r_] := 
 r^4 (l Sqrt[k^2 + r^2])^(-v - 5/2) BesselK[-v - 5/2, l Sqrt[k^2 + r^2]]

In[2]:= {l, k, v} = {0.00313, 0.00825, 0.33};

In[3]:= Block[{x = 10}, 
 NIntegrate[Sinc'[x r] r Sqrt[e[r]], {r, 0, \[Infinity]}, 
  PrecisionGoal -> 3]]

Out[3]= -112494.

यहाँ x के मानों की एक सीमा से अधिक एक भूखंड है:

In[4]:= ListLinePlot[
 Table[NIntegrate[Sinc'[x r] r Sqrt[e[r]], {r, 0, \[Infinity]}, 
   PrecisionGoal -> 3], {x, .5, 10, 0.1}]]

X = 0.5 से x = 10 तक प्लॉट

आप मैन्युअल रूप से लागू करने के लिए विशेष लेविन-प्रकार विधि को निर्दिष्ट कर सकते हैं, जो इस मामले में थोड़ा सुधार कर सकता है:

In[5]:= method = {"LevinRule", "Kernel" -> {Cos[r x], Sin[r x]}, 
   "DifferentialMatrix" -> {{0, -x}, {x, 0}}, 
   "Amplitude" -> {(
     3497.878840962873` Sqrt[(
      r^4 BesselK[-2.17`, 
        0.00313` Sqrt[
         0.00006806250000000001` + r^2]])/(0.00006806250000000001` + 
        r^2)^1.415`])/
     x, -((3497.878840962873` Sqrt[(
       r^4 BesselK[-2.17`, 
         0.00313` Sqrt[
          0.00006806250000000001` + r^2]])/(0.00006806250000000001` + 
         r^2)^1.415`])/(r x^2))}, "AdditiveTerm" -> 0};

In[6]:= Block[{x = 10}, 
 NIntegrate[Sinc'[x r] r Sqrt[e[r]], {r, 0, \[Infinity]}, 
  PrecisionGoal -> 3, Method -> method]]

Out[6]= -112495.

Mathematica में लेविन-प्रकार के तरीकों के विवरण के लिए दस्तावेज़ देखें ।


दुर्भाग्य से मेरे पास गणितज्ञ तक पहुँच नहीं है - केवल MATLAB। मैं अपने प्रश्न को कुछ जोड़े गए प्रश्नों के साथ अपडेट करूंगा, पेपर से जुड़े @Pedro के बारे में।
टोरबोंडे

ठीक है, जैसा कि आप कहते हैं कि आपको मटलब के साथ करना होगा। मैं उस बारे में एक और जवाब जोड़ूंगा।
एंड्रयू मोलन

5

यदि आपके पास मैथेमेटिका तक पहुंच नहीं है, तो आप मैटलैब में एक लेविन-प्रकार (या अन्य विशेष थरथरानवाला) विधि लिख सकते हैं जैसा कि पेड्रो सुझाव देते हैं।

क्या आप मतलाब के लिए च्यूफुन लाइब्रेरी का उपयोग करते हैं ? मैंने अभी सीखा कि इसमें एक बुनियादी लेविन-प्रकार विधि का कार्यान्वयन शामिल है । कार्यान्वयन ऑलवर (दोलन चतुष्कोणीय क्षेत्र के विशेषज्ञों में से एक) द्वारा लिखा गया है। यह एकवचन, अनुकूली उपखंड आदि के साथ सौदा नहीं करता है, लेकिन यह सिर्फ वही हो सकता है जिसे आपको आरंभ करने की आवश्यकता है।


मैंने खुद लेविन पद्धति को लागू करने के बारे में सोचा है, लेकिन मुझे यकीन नहीं है कि मैं अभी तक चुनौती के लिए तैयार हूं। मुझे लगता है कि मुझे विधि को थोड़ा बेहतर समझने की आवश्यकता है। हो सकता है कि मैं उस बारे में अपने सलाहकार से बात कर सकूं। वैसे भी, जो कारण मैंने फिलोन के तरीकों के बारे में पूछा, वह यह है कि वे लागू करने में आसान दिखाई देते हैं। और जब से मुझे अत्यधिक उच्च सटीकता की आवश्यकता नहीं है, लेकिन यह मेरे मास्टर थीसिस का हिस्सा है, कठिनाई में वजन होता है।
टोरबोंड

मैंने chebfun लाइब्रेरी (जो प्रभावशाली है) और लेविन एकीकरण-उदाहरण पर एक नज़र डाली है। लेकिन मैं इसे चालू नहीं कर सकता। मैंने वास्तव में इसके बारे में एक प्रश्न यहां पोस्ट किया है
टोरबोंड

0

पेड्रो द्वारा अनुशंसित परिवर्तन एक महान विचार है। क्या आपने माटलैब के "क्वाडगक" फ़ंक्शन में मापदंडों के साथ खेलने की कोशिश की है? उदाहरण के लिए, पेड्रो के परिवर्तन का उपयोग करते हुए, आप निम्न कार्य कर सकते हैं: इसका
quadgk(f, 0.0+eps, 1.0-eps, 'AbsTol', eps, 'MaxIntervalCount', 100000)
उपयोग करने से मुझे इसका समाधान मिलता है:
-2184689.50220729
और केवल 0.8 सेकंड लगते हैं (ऊपर उल्लिखित मानों का उपयोग करते हुए: x = 10)
वाल्टर गैंडर और वाल्टर गौत्स्की का मतलब के साथ अनुकूली चतुष्कोण पर एक पेपर है कोड आप भी इस्तेमाल कर सकते हैं (लिंक यहाँ )

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.