در این آموزش از مجموعه مطالب ریاضی مجله فرادرس، با «برون یابی ریچاردسون» (Richardson Extrapolation) آشنا میشویم و مشتقگیری و انتگرالگیری با استفاده از این روش را توضیح خواهیم داد.
دقت محدوده وسیعی از روشهای عددی برای تقریب تکراری مقدار متغیر مشخص A به اندازه گام h وابسته است. در حالت کلی، کاهش h مرتبه خطای برش O(hk) نتیجه را افزایش خواهد داد. از لحاظ نظری، مقدار دقیق A را میتوان با حد h→∞ به دست آورد. برون یابی ریچاردسون یک روش عمومی است که عملکرد تکرار را با کاهش اندازه گام و در نتیجه افزایش مرتبه خطای «برش» (Truncation) را بهبود میدهد.
با یک جمله خطای کوچکتر از مرتبه O(hk2)، بزرگتر از O(hk1) روش قدیمی A0(h). این روش برون یابی ریچاردسون را میتوان برای به دست آوردن روش A2 دیگر با یک جمله خطای مرتبه بالاتر O(hk3)، به صورت بازگشتی به A1 اعمال کرد.
بازگشت برون یابی ریچاردسون به صورت زیر نشان داده شده است. روش A0(h) را که مقدار A را بر اساس اندازه گام h تقریب میزند، در نظر بگیرید:
$$ \large \begin {eqnarray}<br />
A & = & \frac { 1 6 A _ 1 ( h / 4 ) - A _ 1 ( h / 2 ) }{ 1 5 } + C _ 3 \frac { h ^ 6 } { 6 4 }<br />
+ C _ 4 \frac { 2 1 h ^ 8 } { 1 0 2 4 } + \cdots<br />
\nonumber \\<br />
& = & A _ 2 ( h / 4 ) + C _ 3 \frac { h ^ 6 }{ 6 4 } + C _ 4 \frac { 2 1 h ^ 8 } { 1 0 2 4 } + \cdots<br />
= A _ 2 ( h / 4 ) + O ( h ^ 6 )<br />
\end {eqnarray} \;\;\; \; ( 1 3 ) $$
در اینجا، یک روش جدید تعریف شده است:
A2(h/4)=1516A1(h/4)−A1(h/2)(14)
n=3: با جایگزینی h در معادله (۱۱)، با h/2، مجدداً خواهیم داشت:
A=A2(h/8)+C364×26h6+C41024×2821h8+⋯(15)
با ضرب دو طرف در 26=64، خواهیم داشت:
64A=64A2(h/8)+C364h6+C4409621h8+⋯(16)
و با کم کردن معادله (۱۳)، میتوان نوشت:
$$ \large \begin {eqnarray}<br />
A & = & \frac { 6 4 A _ 2 ( h / 8 ) - A _ 2 ( h / 4 ) } { 6 3 } - C _ 4 \frac { h ^ 8 } { 4 0 9 6 } + \cdots<br />
\nonumber \\<br />
& = & A _ 3 ( h / 8 ) + O ( h ^ 8 )<br />
\end {eqnarray} \;\;\; (17)$$
در اینجا یک روش جدید دیگر داریم:
A3(h/8)=6364A2(h/8)−A2(h/4)(18)
با یک اندازه گام h/8 و جمله خطای O(h8).
میبینیم که برای هر تکرار در فرایند، مرتبه جمله خطا با ۲ افزایش مییابد. اکنون به جای An(h/2m) از نماد Am,n استفاده میکنیم که m برای اندازه گام hm=hm−1/2=⋯=h0/2m با h0=h است، و n برای روش An در nاُمین سطح بازگشت (m≥n) به دست آمده و فرمول کلی بازگشتی زیر را نشان میدهد:
Am,n=4n−14nAm,n−1−Am−1,n−1(19)
این فرایند بازگشتی را میتوان به فرم جدولی زیر نوشت:
در اینجا، m اندیس بعد عمودی است که اندازههای گام hm=h/2m را نشان میدهد، و n اندیس بعد افقی است که روش به دست آمده در سطح n بازگشت را نشان میدهد. عنصر عمومی Am,n را میتوان با رابطه بازگشتی در معادله (۱۹) بر اساس همسایه سمت چپ آن Am,n−1 بر اساس روش قبلی An−1 با اندازه گام مشابه hm به دست آورد. همسایه بالا چپ Am−1,n−1 نیز با روش قبلی An−1 تولید شده است، اما با استفاده از یک اندازه گام hm−1=2hm. جمله خطای An,n روی قطر جدول دو درجه بزرگتر از An−1,n−1 و 2n درجه بزرگتر از روش اولیه A0,0 است.
مشتق گیری با برون یابی ریچاردسون
برون یابی ریچاردسون را میتوان برای بهبود مشتقگیری عددی به کار برد. مجدداً ذکر میکنیم که D[f]=f′(x) را میتوان با تفاضل مرکزی مبتنی بر دو نقطه همسایه x−h و x+h با اندازه گام h و جمله خطای برش O(h2)، مطابق معادله زیر به دست آورد:
$$ \large \begin {eqnarray}<br />
D [ f ] & = & \frac { f ( x + h ) - f ( x - h ) } { 2 h }<br />
- \left [ \frac { f ^ {\prime \prime \prime } ( x ) } { 3 ! } h ^ 2 + \frac { f ^ { ( 5 ) } ( x ) } { 5 ! } h ^ 4 + \cdots \right ]<br />
\nonumber \\ & = & D _ 0 ( h ) + C _ 1 h ^ 2 + C _ 2h ^ 4 + C _ 3 h ^ 6 + C _ 4 h ^ 8 + \cdots = D _ 0 ( h ) +C _2 h ^ 2 + O ( h ^ 4 )<br />
\end {eqnarray} \;\;\; (20)$$
$$ \large \begin {eqnarray}<br />
D _ 1 ( h / 2 ) & = & \frac { 4 D _ 0 ( h / 2 ) - D _ 0 ( h ) } { 3 }<br />
= \frac { 1 } { 3 } \left [ 4 \frac { f ( x + h / 2 ) - f ( x - h / 2 ) } { h }<br />
- \frac { f ( x + h ) - f ( x - h ) } {2 h } \right ]<br />
\nonumber \\<br />
& = & \frac { 1 } { 6 h } \left [ f ( x - h ) - 8 f ( x - h / 2 ) + 8 f ( x + h / 2 ) - f ( x + h ) \right ]<br />
\end {eqnarray} \;\;\; ( 24) $$
یک روش جدید مبتنی بر چهار نقطه x−h، x−h/2، x+h/2 و x+h، با اندازه گام h/2 و یک جمله خطای O(h4) است.
دقت را میتوان با فرایند مشابهی بیشتر بهبود داد. مجدداً h را در D1(h/2) با h/2 جایگزین کرده و گامهای مشابهی را طی میکنیم:
که بر اساس شش نقطه x±h، x±h/2 و x±h/4 با اندازه گام h/4 و جمله خطای O(h6) منجر به یک روش جدید میشود:
$$ \large \begin {eqnarray}<br />
D _ 2 ( h /4 ) & = & \frac { 1 6 D _ 1 ( h / 4 ) - D _ 1 ( h / 2 ) } { 1 5 }<br />
\nonumber \\<br />
& = & \frac { 1 } { 1 5 } \; \frac { 1 6 } { 3 h } [ f ( x -h / 2 ) - 8 f ( x - h / 4 )<br />
+ 8 f ( x + h / 4 ) + f ( x + h / 2 ) ]<br />
\nonumber \\<br />
& & - \frac { 1 } { 1 5 } \; \frac { 1 } { 6 h } [ f ( x - h ) - 8 f ( x - h / 2 ) + 8 f ( x + h / 2 ) - f ( x + h ) ]<br />
\nonumber \\<br />
& = & \frac { 1 } { 9 0 h } [ - f ( x - h ) + 4 0 f ( x -h / 2 ) - 2 5 6 f ( x - h / 4 )<br />
\nonumber \\<br />
& & + 2 5 6 f ( x + h / 4 ) - 4 0 f ( x + h / 2 ) + f ( x + h ) ]<br />
\end {eqnarray} \;\;\; (26) $$
لازم به ذکر است که D1(h) و D2(h) در واقع روشهای مشابه قبل هستند که با روش ضرایب نامعین به دست آمدند. با این حال، اکنون میدانیم فرایندی را که در بالا مورد بحث قرار گرفت، میتوان به صورت بازگشتی و برای به دست آوردن روشهای D3، D4 و... با نتایج دقیقتر انجام داد.
فرایند برون یابی ریچاردسون را میتوان به صورت تکراری برای بهبود دقت انجام داد.
مثال مشتق گیری با برون یابی ریچاردسون
میخواهیم مشتق تابع گاوسیf(x)=e−x2 در x=1 را به دست آوریم. ابتدا، n=m=0 را قرار میدهیم و از روش تفاضل تقسیم شده با اندازه گام h0=h=1 استفاده میکنیم:
f′(x)≈D0,0=2hf(x+h)−f(x−h)=−0.4908(27)
از n=0 برای روش مشابه شروع میکنیم، اما m=1 را برای یک گام کوچکتر سمت h1=h0/2m=h0/2=0.5:
D1,0=2f(x+h/2)−f(x−h/2)=−0.6734(28)
اکنون یک روش جدید با استفاده از برون یابی ریچاردسون برای ایجاد یک نتیجه دقیقتر به دست میآوریم:
D1,1=34D1,0−D0,0=−0.73425(29)
این فرایند به صورت بازگشتی اغلب برای تولید نتایج نشان داده شده در جدول زیر انجام میشود. هر وقت اندیس سطر m به اندازه ۱ اضافه شود، اندازه گام hm=h/2m نصف میشود؛ و هر زمان اندیس ستون n به اندازه زیاد شود، یک روش جدید با یک مرحله بیشتر از بازگشت به دست میآید. همه نتایج در nاُمین ستون با روش مشابه Dn اما بر اساس اندازه گامهای مختلف تولید میشود، اما همه بر اساس اندازه گام مشابه hn=h/2n. هر عنصر Dm,n در جدول بر اساس همسایه چپ Dm,n−1 و همسایه بالا چپ Dm−1,n−1 با بازگشت به دست میآید:
Dm,n=4n−14nDm,n−1−Dm−1,n−1(30)
دقیقترین نتیجه در هر مرحله بازگشت روی قطر جدول است. در این مورد خاص، D4,4=−0.7357589 دقیقترین نتیجه است که بعد از n=4 سطح بازگشت با استفاده از یک اندازه گام h4=h/24=h/16 به دست میآید.
سطر آخر نشان میدهد که خطاهای نسبی پنج روش Dn,n,n=0,⋯,4 در قطر اصلی با مقدار واقعی مقایسه شدهاند:
1 h=1;% inital step size2 n=5;% number of recursions3 m=n;4 D=zeros(n);% initializing array D5fori=1:m % for all rows 6 n=2^(i-1);7D(i,1)=(f(x+h)-f(x-h))/2/h;8forj=2:i% for all columns9D(i,j)=(4^(j-1)*D(i,j-1)-D(i-1,j-1))/(4^(j-1)-1);10end11 h=h/2;12end
انتگرال گیری با برون یابی ریچاردسون
برون یابی ریچاردسون را میتوان برای بهبود انتگرالگیری عددی نیز به کار برد (با روش منتجهای که «روش رمبرگ» (Romberg Method) نامیده میشود). با یادآوری قانون ذوزنقهای، خواهیم داشت:
$$ \large \begin {eqnarray}<br />
I [ f ] & = & \int _ a ^ b f ( x ) \, d x<br />
\approx h \frac { f ( a ) + f ( b ) } { 2 } + h \, \sum _ { k = 1 } ^ { n - 1 } f ( a + k h )<br />
\nonumber \\<br />
& = & h \frac { f ( a ) - f ( b ) } { 2 } + h \,\sum _ { k = 1 } ^ n f ( a + k h )<br />
\end {eqnarray} \;\;\; (32) $$
که h=(b−a)/n است. در تئوری، با حد n→∞ خواهیم داشت: (b−a)/n→0 و I0(h) انتگرال I[f] خواهد بود:
h→0limI0(h)=∫abf(x)dx=I[f](33)
البته این روش از نظر محاسباتی عملی نیست.
با این حال، میتوانیم از برون یابی ریچاردسون استفاده کنیم تا درجه جملات خطا را افزایش داده و دقت را بهبود بخشیم. به طور خاص، یک متغیر دیگر t را معرفی میکنیم، به گونهای که x=a+th، dx=hdt، xk=a+kh و b=a+nh. علاوه بر این، ϕ(t)=f(a+th) را تعریف میکنیم و خواهیم داشت:
ϕ(k)(t)=dtkdkϕ(t)=dtkdkf(a+th)=hkf(k)(x)(34)
اکنون f(a)، f(a+kh) و f(b)=f(a+nh) به ترتیب، به ϕ(0)، ϕ(k) و ϕ(n) تبدیل خواهند شد و روش ذوزنقهای بالا به صورت زیر در میآید:
$$ \large \begin {eqnarray}<br />
I [ f ] & = & \int _ a ^ b f ( x ) \, d x = h \int _ 0 ^ n \phi ( t ) \, d t \approx<br />
h \frac { \phi ( 0 ) - \phi ( n ) } { 2 } + h \sum _ { k = 1 } ^ n \phi ( k )<br />
\end {eqnarray} \;\;\; (35) $$
$$ \large \begin {eqnarray}<br />
I [ f ] & = & \int _ a ^ b f ( x ) \, d x = h \int _ 0 ^ n \phi ( t ) \, d t<br />
\nonumber \\<br />
& = & h \frac { \phi ( 0 ) - \phi ( n ) }{ 2 } + h \sum _ { k = 1 } ^ n \phi ( k )<br />
- h \sum _ { k = 1 } ^ \infty \frac { B _ { 2 k } } { ( 2 k ) ! } [ \phi ^ { ( 2 k - 1 ) } ( n ) - \phi ^ { ( 2 k - 1 ) } ( 0 ) ]<br />
\nonumber \\<br />
& = & h \left [ \frac { f ( a ) - f ( b ) }{ 2 } + \sum _ { k = 1 } ^ n f ( a + k h ) \right ]<br />
- h ^ { 2 k } \sum _ { k = 1 } ^ \infty \frac { B _ { 2 k } }{ ( 2 k ) ! } [ f ^ { ( 2 k - 1 ) } ( b ) - f ^ { ( 2 k - 1 ) } ( a ) ]<br />
\nonumber \\<br />
& = & I _ 0 ( h ) + \sum _ { k = 1 } ^ \infty C _ k h ^ { 2 k } = I _ 0 ( h ) + C _ 1 h ^ 2 + C _ 4 h ^ 4 + \cdots<br />
= I _ 0 ( h ) + O ( h ^ 2 )<br />
\end {eqnarray} \;\;\; (37) $$
که I0(h) روش قاعده ذوزنقهای ترکیبی را مشخص میکند:
انتگرال تابع گاوسی را با میانگین صفر و انحراف معیار واحد محاسبه میکنیم:
I[f]=∫abf(x)dx=2π1∫03e−x2/2dx(46)
در ابتدا، m=0 و h0=(b−a)/2m=b−a=3 را قرار میدهیم و انتگرال را با قاعده ذوزنقهای تقریب میزنیم:
I[f]≈I0,0=(b−a)2f(a)+f(b)=0.6051(47)
با n=1 و h1=(b−a)/2=1.5 و انتگرال را به صورت زیر تقریب میزنیم:
I[f]≈I1,0=2h[f(a)+2f(a+h)+f(b)]=0.4968(48)
اکنون میتوانیم یک روش جدید با برون یابی ریچاردسون برای تولید یک نتیجه دقیقتر به دست آوریم:
I1,1=34I1,0−I0,0=0.46072(49)
این فرایند به صورت بازگشتی بیشتر برای تولید نتایج نشان داده شده در جدول زیر انجام میشود. هر وقت اندیس سطر m به اندازه ۱ افزایش یابد، اندازه گام hm=h/2m نصف میشود. و هر بار که اندیس ستون n به یکی افزایش یابد، با استفاده از سطح بازگشتی بیشتر، روش جدید به دست میآید. تمام نتایج در ستون نهم با همان روش In تولید میشوند، اما بر اساس اندازههای گام مختلف. همه نتایج سطر mاُم با روشهای مختلف تولید میشوند، اما همه بر اساس همان اندازه گام hn=h/2n است. هر عنصر Im,n در جدول بر اساس همسایه سمت چپ Im،n−1 و همسایه سمت چپ بالای آن Im−1،n−1 توسط بازگشت زیر به دست میآید:
Im,n=4n−14nIm,n−1−Im−1,n−1(50)
دقیقترین نتیجه در هر سطح بازگشت روی قطر جدول قرار دارد. در این مورد خاص، I4,4=0498650193 دقیقترین نتیجه به دست آمده پس از n=4 سطح بازگشت با استفاده از اندازه گام h4=(b−a)/24=(b−a)/16 است.
سطر آخر خطاهای نسبی پنج روش In,n,n=0,⋯,4 در قطر را نشان میدهد.
کد متلب مورد استفاده برای تولید نتایج این جدول به صورت زیر است:
1 h=b-a;% initial step size2 n=5;% number of recursions3 m=n;4 I=zeros(n);% initializing array I5fori=1:m % for all rows6 n=2^(i-1);7I(i,1)=(f(a)+f(b))/2;8for k=1:n-19I(i,1)=I(i,1)+f(a+k*h);10end11I(i,1)=h*I(i,1);% composite trapezoidal rule12forj=2:i% for all columns (Richardson extrapolation)13I(i,j)=(4^(j-1)*I(i,j-1)-I(i-1,j-1))/(4^(j-1)-1);14end15 h=h/2;16end
اگر این مطلب برای شما مفید بوده است، آموزشها و مطالب زیر نیز به شما پیشنهاد میشوند:
سید سراج حمیدی دانشآموخته مهندسی برق است و به ریاضیات و زبان و ادبیات فارسی علاقه دارد. او آموزشهای مهندسی برق، ریاضیات و ادبیات مجله فرادرس را مینویسد.