Skip to main content
LibreTexts - Ukrayinska

3.3: Метод Рунге-Кутта

  • Page ID
    62131
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \) \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)\(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\) \(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\)

    Загалом, якщо будь-яке\(k\) додатне ціле число і\(f\) задовольняє відповідні припущення, існують числові методи з локальною похибкою усічення\(O(h^{k+1})\) для розв'язання задачі початкового значення

    \[\label{eq:3.3.1} y'=f(x,y),\quad y(x_0)=y_0.\]

    Більш того, можна показати, що метод з локальною помилкою усічення\(O(h^{k+1})\) має глобальну помилку усічення\(O(h^k)\). У розділах 3.1 і 3.2 ми вивчали чисельні методи, де\(k=1\) і\(k=2\). Пропустимо методи, для яких\(k=3\) і перейдемо до методу Рунге - Кутта, найбільш широко використовуваному методу, для якого\(k=4\). Величина локальної похибки усічення визначається п'ятою похідною\(y^{(5)}\) розв'язку задачі початкового значення. Тому локальна помилка усічення буде більшою там, де\(|y^{(5)}|\) велика, або менша, де\(|y^{(5)}|\) мала. Метод Рунге-Кутта обчислює наближені значення\(y_1\)\(y_2\),,...,\(y_n\) розв'язку Рівняння\ ref {eq:3.3.1} at\(x_0\)\(x_0+h\),,...\(x_0+nh\) наступним чином: Задано\(y_i\), обчислити

    \[\begin{align*} k_{1i}&=f(x_i,y_i),\\ k_{2i}&=f \left(x_i+{h\over2},y_i+{h\over2}k_{1i}\right),\\ k_{3i}&=f\left(x_i+{h\over2},y_i+{h\over2}k_{2i}\right),\\ k_{4i}&=f(x_i+h,y_i+hk_{3i}),\end{align*}\]

    і

    \[y_{i+1}=y_i+{h\over6}(k_{1i}+2k_{2i}+2k_{3i}+k_{4i}).\nonumber \]

    Наступний приклад, який стосується задачі початкового значення, розглянутого в Прикладах і Прикладах Template:index, ілюструє обчислювальну процедуру, зазначену в методі Рунге-Кутти.

    Приклад Template:index

    Використовувати метод Рунге-Кутта with,\(h=0.1\) щоб знайти приблизні значення для розв'язку початкової задачі

    \[\label{eq:3.3.2} y'+2y=x^3e^{-2x},\quad y(0)=1,\]

    в\(x=0.1,0.2\).

    Рішення

    Знову переписуємо рівняння\ ref {eq:3.3.2} як

    \[y'=-2y+x^3e^{-2x},\quad y(0)=1, \nonumber\]

    який має вигляд Рівняння\ ref {eq:3.3.1}, з

    \[f(x,y)=-2y+x^3e^{-2x},\ x_0=0,\mbox{ and}\ y_0=1. \nonumber\]

    Метод Рунге-Кутта дає

    \[\begin{aligned} k_{10} & = f(x_0,y_0) = f(0,1)=-2,\\ k_{20} & = f(x_0+h/2,y_0+hk_{10}/2)=f(.05,1+(.05)(-2))\\ &= f(.05,.9)=-2(.9)+(.05)^3e^{-.1}=-1.799886895,\\ k_{30} & = f(x_0+h/2,y_0+hk_{20}/2)=f(.05,1+(.05)(-1.799886895))\\ &= f(.05,.910005655)=-2(.910005655)+(.05)^3e^{-.1}=-1.819898206,\\ k_{40} & = f(x_0+h,y_0+hk_{30})=f(.1,1+(.1)(-1.819898206))\\ &=f(.1,.818010179)=-2(.818010179)+(.1)^3e^{-.2}=-1.635201628,\\ y_1&=y_0+{h\over6}(k_{10}+2k_{20}+2k_{30}+k_{40}),\\ &=1+{.1\over6}(-2+2(-1.799886895)+2(-1.819898206) -1.635201628)=.818753803,\\[4pt] k_{11} & = f(x_1,y_1) = f(.1,.818753803)=-2(.818753803))+(.1)^3e^{-.2}=-1.636688875,\\ k_{21} & = f(x_1+h/2,y_1+hk_{11}/2)=f(.15,.818753803+(.05)(-1.636688875))\\ &= f(.15,.736919359)=-2(.736919359)+(.15)^3e^{-.3}=-1.471338457,\\ k_{31} & = f(x_1+h/2,y_1+hk_{21}/2)=f(.15,.818753803+(.05)(-1.471338457))\\ &= f(.15,.745186880)=-2(.745186880)+(.15)^3e^{-.3}=-1.487873498,\\ k_{41} & = f(x_1+h,y_1+hk_{31})=f(.2,.818753803+(.1)(-1.487873498))\\ &=f(.2,.669966453)=-2(.669966453)+(.2)^3e^{-.4}=-1.334570346,\\ y_2&=y_1+{h\over6}(k_{11}+2k_{21}+2k_{31}+k_{41}),\\ &=.818753803+{.1\over6}(-1.636688875+2(-1.471338457)+2(-1.487873498)-1.334570346) \\&=.670592417.\end{aligned}\]

    Метод Рунге-Кутта досить точний для більшості застосувань.

    Приклад Template:index

    Таблиця Template:index показує результати використання методу Рунге-Кутти з розмірами кроків\(h=0.1\) і\(h=0.05\) знайти приблизні значення розв'язку початкової задачі

    \[y'+2y=x^3e^{-2x},\quad y(0)=1 \nonumber\]

    в\(x=0\),\(0.1\),\(0.2\),\(0.3\),...,\(1.0\). Для порівняння він також показує відповідні наближені значення, отримані за допомогою вдосконаленого методу Ейлера в прикладі 3.2.2, і значення точного розв'язку

    \[y={e^{-2x}\over4}(x^4+4).\nonumber \]

    Результати, отримані методом Рунге-Кутта, явно кращі, ніж отримані вдосконаленим методом Ейлера фактично; результати, отримані методом Рунге-Кутта з\(h=0.1\), кращі, ніж результати, отримані вдосконаленим методом Ейлера с\(h=0.05\).

    Покращений Ейлер Рунге-Кутта
    х h=0.1 н=0,05 h=0.1 ч -0,05 «точний»
    0.0 1.000000000 1.000000000 1.000000000 1.000000000 1.000000000
    0.1 0.820040937 0,819050572 0,818753803 0,818751370 0,818751221
    0.2 0.672734445 0.67108645 0.670592417 0.670588418 0.670588174
    0.3 0,552597643 0.550543878 0.549928221 0.549923281 0.549922980
    0.4 0,455 160637 0,452890616 0,452210430 0,452205001 0,452204669
    0.5 0,37668 1251 0,3743 35747 0,373633492 0,373627899 0,373627557
    0.6 0.313970920 0,31 1652239 0.310958768 0,310953242 0,310952904
    0.7 0.264287611 0.262067624 0.261404568 0.261399 270 0.261398947
    0.8 0,225 267702 0,223 194281 0,2225 75989 0.222571024 0.222570721
    0.9 0,1948 79501 0,192981757 0,1924 16882 0,1924 12317 0,1924 12038
    1.0 0,17 138 8070 0.169680673 0,169 173489 0.169169356 0.169169104
    Таблиця Template:index: Чисельне розв'язання методом Рунге-Кутта та вдосконаленим методом Ейлера.\(y'+2y=x^3e^{-2x},\ y(0)=1\)
    Приклад Template:index

    Таблиця Template:index показує аналогічні результати для нелінійної задачі на початкове значення

    \[y'=-2y^2+xy+x^2,\ y(0)=1. \nonumber\]

    Ми застосували вдосконалений метод Ейлера до цієї проблеми в прикладі 3.2.3.

    Покращений Ейлер Рунге-Кутта
    х h=0.1 н=0,05 h=0.1 ч -0,05 «точний»
    0.0 1.000000000 1.000000000 1.000000000 1.000000000 1.000000000
    0.1 0.840500 000 0,838288371 0.837587192 0.837584759 0.837584494
    0.2 0,733430846 0,73055677 0.729644 487 0,729642155 0,729641890
    0.3 0.661600806 0.658552190 0.657 582449 0.657580598 0.657 580377
    0.4 0.615961841 0.612884493 0.611903380 0.611901969 0.611901791
    0.5 0.591634742 0.588558952 0.587576716 0.587575635 0.587575491
    0.6 0.58600 6935 0.582927224 0.581943210 0.581942342 0.581942225
    0.7 0.597712120 0.594618012 0.593630403 0.593629627 0.593629526
    0.8 0.626008824 0,62 2898279 0.62 1908378 0.62 1907553 0.62 1907458
    0.9 0.670351225 0.667237617 0.66625 1988 0.666250942 0.666250842
    1.0 0,7300 69610 0.726985837 0,726017378 0,726015908 0,726015790
    Таблиця Template:index: Чисельне розв'язування методом Рунге-Кутта та вдосконаленим методом Ейлера.\(y'=-2y^2+xy+x^2,\ y(0)=1\)
    Приклад Template:index

    Таблиці Template:index та Template:index показують результати, отримані шляхом застосування напівлінійних методів Рунге-Кутта та Рунге-Кутта до початкової задачі

    \[y'-2xy=1,\ y(0)=3, \nonumber\]

    які ми розглядали в прикладах Template:index та Template:index

    \(x\) \(h=0.2\) \(h=0.1\) \(h=0.05\) «Точний»
    \ (x\)» style="вирівнювання тексту: центр; "> 0.0 \ (h = 0.2\)» style="вирівнювання тексту: праворуч; "> 3.000000000 \ (h = 0.1\)» style="вирівнювання тексту: праворуч; "> 3.000000000 \ (h = 0.05\)» style="вирівнювання тексту: праворуч; "> 3.000000000 3.000000000
    \ (x\)» style="вирівнювання тексту: центр; "> 0.2 \ (h = 0.2\)» style="вирівнювання тексту: праворуч; "> 3.327846400 \ (h = 0.1\)» style="вирівнювання тексту: праворуч; "> 3.327851633 \ (h=0.05\)» style="вирівнювання тексту: праворуч; "> 3.327851952 3 2785 1973
    \ (x\)» style="вирівнювання тексту: центр; "> 0.4 \ (h = 0.2\)» style="вирівнювання тексту: праворуч; "> 3.966044973 \ (h = 0.1\)» style="вирівнювання тексту: праворуч; "> 3.966058535 \ (h = 0.05\)» style="вирівнювання тексту: праворуч; "> 3.966059300 3 966059348
    \ (x\)» style="вирівнювання тексту: центр; "> 0.6 \ (h = 0.2\)» style="вирівнювання тексту: праворуч; "> 5.066996754 \ (h = 0.1\)» style="вирівнювання тексту: праворуч; "> 5.067037123 \ (h = 0.05\)» style="вирівнювання тексту: праворуч; "> 5.067039396 5.0670 39535
    \ (x\)» style="вирівнювання тексту: центр; "> 0.8 \ (h = 0.2\)» style="вирівнювання тексту: праворуч; "> 6.936534178 \ (h = 0.1\)» style="вирівнювання тексту: праворуч; "> 6.936690679 \ (h = 0.05\)» style="вирівнювання тексту: праворуч; "> 6.936700320 6.936700945
    \ (x\)» style="вирівнювання тексту: центр; "> 1.0 \ (h = 0.2\)» style="вирівнювання тексту: праворуч; "> 10.184232252 \ (h = 0.1\)» style="вирівнювання тексту: праворуч; "> 10.184877733 \ (h = 0.05\)» style="вирівнювання тексту: праворуч; "> 10.184920997 10.1849 23955
    \ (x\)» style="вирівнювання тексту: центр; "> 1.2 \ (h = 0.2\)» style="вирівнювання тексту: праворуч; "> 16.064344805 \ (h = 0.1\)» style="вирівнювання тексту: праворуч; "> 16.066915583 \ (h = 0.05\)» style="вирівнювання тексту: праворуч; "> 16.067098699 16.0671 1677
    \ (x\)» style="вирівнювання тексту: центр; "> 1.4 \ (h = 0.2\)» style="вирівнювання тексту: праворуч; "> 27.278771833 \ (h = 0.1\)» style="вирівнювання тексту: праворуч; "> 27.288605217 \ (h = 0,05\)» style="вирівнювання тексту: праворуч; "> 27.289338955 27.289392347
    \ (x\)» style="вирівнювання тексту: центр; "> 1.6 \ (h = 0.2\)» style="вирівнювання тексту: праворуч; "> 49.960553660 \ (h = 0.1\)» style="вирівнювання тексту: праворуч; "> 49.997313966 \ (h = 0.05\)» style="вирівнювання тексту: праворуч; "> 50.000165744 50.000377775
    \ (x\)» style="вирівнювання тексту: центр; "> 1.8 \ (h = 0.2\)» style="вирівнювання тексту: праворуч; "> 98.834337815 \ (h = 0.1\)» style="вирівнювання тексту: праворуч; "> 98.971146146 \ (h = 0.05\)» style="вирівнювання тексту: праворуч; "> 98.982136702 98.98 2969504
    \ (x\)» style="вирівнювання тексту: центр; "> 2.0 \ (h = 0.2\)» style="вирівнювання тексту: праворуч; "> 211.393800152 \ (h = 0.1\)» style="вирівнювання тексту: праворуч; "> 211.908445283 \ (h = 0.05\)» style="вирівнювання тексту: праворуч; "> 211.951167637 211.954462214
    \(x\) \(h=0.2\) \(h=0.1\) \(h=0.05\) «Точний»
    \ (x\) ">0.0 \ (h = 0.2\) ">3.000000000 \ (h=0.1\) ">3.000000000 \ (h = 0,05\) ">3.000000000 3.000000000
    \ (x\) ">0.2 \ (h=0,2\) ">3,327853286 \ (h=0.1\) ">3.327852055 \ (h=0,05\) ">3.327851978 3 2785 1973
    \ (x\) ">0.4 \ (h=0,2\) ">3.966061755 \ (h=0.1\) ">3.966059497 \ (h = 0,05\) ">3.966059357 3 966059348
    \ (x\) ">0.6 \ (h=0,2\) ">5.067042602 \ (h=0.1\) ">5.067039725 \ (h=0,05\) ">5.067039547 5.0670 39535
    \ (x\) ">0,8 \ (h=0,2\) ">6.936704019 \ (h=0.1\) ">6.936701137 \ (h = 0,05\) ">6.936700957 6.936700945
    \ (x\) ">1.0 \ (h=0,2\) ">10.184926171 \ (h=0.1\) ">10.184924093 \ (h=0,05\) ">10.184923963 10.1849 23955
    \ (x\) ">1.2 \ (h=0.2\) ">16,067111961 \ (h=0.1\) ">16,067111696 \ (h=0,05\) ">16,067111678 16.0671 1677
    \ (x\) ">1.4 \ (h=0,2\) ">27.289389418 \ (h=0.1\) ">27.289392167 \ (h = 0,05\) ">27.289392335 27.289392347
    \ (x\) ">1.6 \ (h=0.2\) ">50.000370152 \ (h=0.1\) ">50.000377302 \ (h=0,05\) ">50.000377745 50.000377775
    \ (x\) ">1.8 \ (h=0,2\) ">98,982955511 \ (h=0.1\) ">98.982968633 \ (h=0,05\) ">98.982969450 98.98 2969504
    \ (x\) ">2.0 \ (h=0,2\) ">211,954439983 \ (h=0.1\) ">211,954460825 \ (h = 0,05\) ">211,954462127 211.954462214
    Таблиця Template:index: Числове\(y'-2xy=1,\ y(0)=3\) розв'язання напівлінійним методом Рунге-Кутти.

    Випадок, коли xне є лівою кінцевою точкою

    Поки що в цьому розділі ми розглянули числові методи розв'язання задачі початкового значення

    \[\label{eq:3.3.3} y'=f(x,y),\quad y(x_0)=y_0\]

    на інтервалі\([x_0,b]\), для якого\(x_0\) знаходиться ліва кінцева точка. Ми не обговорювали числові методи розв'язання Equation\ ref {eq:3.3.3} на інтервалі\([a,x_0]\), для якого\(x_0\) є права кінцева точка. Якщо бути конкретним, то як отримати наближені значення\(y_{-1}\),\(y_{-2}\),...,\(y_{-n}\) розв'язку Рівняння\ ref {eq:3.3.3} at\(x_0-h, \dots,x_0-nh\), де\(h=(x_0-a)/n\)? Ось відповідь на це питання:

    Питання

    Розглянемо початкову задачу значення

    \[\label{eq:3.3.4} z'=-f(-x,z),\quad z(-x_0)=y_0,\]на проміжку\([-x_0,-a]\), для якого\(-x_0\) знаходиться ліва кінцева точка. Використовуйте числовий метод для отримання\(z_1\) наближених\(z_2\) значень,,...,\(z_n\) розв'язку\(\eqref{eq:3.3.4}\) at\(-x_0+h\)\(-x_0+2h\),...,\(-x_0+nh=-a\). Потім\(y_{-1}=z_1\),\(y_{-2}=z_2\),\(\dots\),\(y_{-n}=z_n\) наводяться приблизні значення розв'язку\(\eqref{eq:3.3.3}\) at\(x_0-h\),\(x_0-2h\),...,\(x_0-nh=a\).

    Обґрунтування цієї відповіді наведено у вправі 3.3.23. Зверніть увагу, як легко змінити задану задачу Equation\ ref {eq:3.3.3} на модифіковану задачу Equation\ ref {eq:3.3.4}: спочатку замінити\(f\) на\(-f\)\(x\)\(x_0\), а потім замінити\(-x\), і\(y\) на\(-x_0\), і\(z\), відповідно.

    Приклад Template:index

    Використовуйте метод Рунге-Кутта з розміром кроку,\(h=0.1\) щоб знайти приблизні значення розв'язку

    \[\label{eq:3.3.5} (y-1)^2y'=2x+3,\quad y(1)=4\]

    в\(x=0\),\(0.1\),\(0.2\),...,\(1\).

    Рішення

    Ми спочатку перепишемо рівняння\ ref {eq:3.3.5} у вигляді Рівняння\ ref {eq:3.3.3} як

    \[\label{eq:3.3.6} y'={2x+3\over(y-1)^2},\quad y(1)=4.\]

    Так як початкова умова\(y(1)=4\) накладається в правій кінцевій точці інтервалу\([0,1]\), застосуємо метод Рунге-Кутта до початкової задачі

    \[\label{eq:3.3.7} z'={2x-3\over(z-1)^2},\quad z(-1)=4\]

    на проміжку\([-1,0]\). (Ви повинні переконатися, що рівняння\ ref {eq:3.3.7} пов'язане з рівнянням\ ref {eq:3.3.6}, оскільки рівняння\ ref {eq:3.3.4} пов'язане з рівнянням\ ref {eq:3.3.3}.) Таблиця [табл:3.3.5} показує результати. Зворотний порядок рядків у таблиці [табл:3.3.5} і зміна знаків значень\(x\) дає перші два стовпці таблиці [табл:3.3.6}. В останньому стовпці таблиці [table:3.3.6} вказані точні значення\(y\), які задаються

    \[y=1+(3x^2+9x+15)^{1/3}.\nonumber \]

    (Оскільки диференціальне рівняння в Equation\ ref {eq:3.3.6} роздільне, цю формулу можна отримати методом розділу 2.2.)

    \(x\) \(z\)
    \ (x\) ">-1.0 \ (z\) ">4.000000000
    \ (x\) ">-0.9 \ (z\) ">3,944536474
    \ (x\) ">-0.8 \ (z\) ">3.889298649
    \ (x\) ">-0.7 \ (z\) ">3,834355648
    \ (x\) ">-0.6 \ (z\) ">3.779786399
    \ (x\) ">-0.5 \ (z\) ">3.725680888
    \ (x\) ">-0.4 \ (z\) ">3.672141529
    \ (x\) ">-0.3 \ (z\) ">3.619284615
    \ (x\) ">-0.2 \ (z\) ">3.567241862
    \ (x\) ">-0.1 \ (z\) ">3,516161955
    \ (x\) ">0.0 \ (z\) ">3.466212070
    Таблиця Template:index: Числове розв'язання\(z'= {2x-3\over(z-1)^2},\ z(-1)=4\), на\([-1,0]\).
    \(x\) \(y\) Точний
    \ (х\) ">0,00 \ (y\) ">3.466212070 3.46621 2074
    \ (x\) ">0,10 \ (y\) ">3.516161955 3 516 161958
    \ (x\) ">0,20 \ (y\) ">3.567241862 3 56724 1864
    \ (x\) ">0,30 \ (y\) ">3.619284615 3.6 1928 4617
    \ (x\) ">0,40 \ (y\) ">3.672141529 3 672 141530
    \ (x\) ">0,50 \ (y\) ">3.725680888 3.725680889
    \ (x\) ">0,60 \ (y\) ">3.779786399 3.779786399
    \ (x\) ">0,70 \ (y\) ">3.834355648 3,834 355648
    \ (x\) ">0,80 \ (y\) ">3.889298649 3.889298649
    \ (x\) ">0,90 \ (y\) ">3,944536474 3 9445 36474
    \ (x\) ">1,00 \ (y\) ">4.000000000 4.000000000
    Таблиця Template:index: Числове розв'язання\((y-1)^2y'=2x+3,\ y(1)=4\), на\([0,1]\).

    Ми залишаємо вам розробити процедуру обробки числового розв'язку Equation\ ref {eq:3.3.3} на\([a,b]\) такому інтервалі, що\(a<x_0<b\) (Вправи 3.3.26 і 3.3.27).