Lövés módszer

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2018. szeptember 21-én felülvizsgált verziótól ; az ellenőrzések 6 szerkesztést igényelnek .

A felvételi módszer (határérték-probléma) egy numerikus módszer , amely abból áll, hogy a határérték-problémát valamilyen Cauchy-problémára redukáljuk ugyanazon differenciálegyenlet -rendszer esetében . A lényeg: az első megoldás az érvelés egymást követő megváltoztatásával és a számítások ismétlésével pontosabbá válik

A módszer leírása

Megvizsgáljuk egy általános alakú peremfeltételekkel rendelkező két elsőrendű egyenletrendszer problémáját:

rendszer



határviszonyok




Algoritmus

1. A feltétel tetszőlegesen kerül kiválasztásra .

2. A bal oldali peremfeltételt algebrai egyenletnek tekintjük . Meghatározzuk az azt kielégítő értéket .

3. Az értékeket a vizsgált rendszer Cauchy-probléma kezdeti feltételeiként választják ki, és ezt a Cauchy-problémát bármilyen numerikus módszerrel integrálják (például a Runge-Kutta sémák szerint).

4. Ennek eredményeként olyan megoldást kapunk , amely η paramétertől függ.

Az értéket úgy választjuk meg, hogy a talált megoldás kielégítse a bal oldali peremfeltételt. Ez a megoldás azonban általánosságban nem tesz eleget a jobb oldali peremfeltételnek: ha behelyettesítjük, a jobb oldali peremfeltétel bal oldala, a paraméter valamilyen függvényének tekintendő :

,

nem megy nullára.

5. Az η paramétert aszerint választjuk ki, hogy milyen feltétellel találunk olyan értéket, amelyhez a kívánt pontossággal.

Így a határérték-probléma megoldása egy algebrai egyenlet gyökerének megtalálására redukálódik . [egy]

Példa egy Python programra

import matplotlib.pyplot mint plt import numpy mint np a , b = 0,0 , 1,0 A , B = 1,0 , np . e n = 5 h = ( b - a ) / n D0 , D1 = A + h , h y = [[ A , D0 ], [ 0 , D1 ]] def p ( x ): visszatérés 1 def q ( x ): visszatérés 1 def f ( x ): return 3 * ( np . e ** x ) def get_c1 (): globális n visszatérés ( B - y [ 0 ][ n ]) / y [ 1 ][ n ] def get_solv_y_i ( i ): return y [ 0 ][ i ] + get_c1 () * y [ 1 ][ i ] x = np . linspace ( a , b , n + 1 ) def div ( a , b ): return a / b i esetén az ( 1 , n ) tartományban : y [ 0 ] . hozzáfűz ( div ( ( h ** 2 * f ( x [ i ]) - ( 1,0 - ( h / 2 ) * p ( x [ i ])) * y [ 0 ][ i - 1 ] - ( h ** 2 * q ( x [ i ]) - 2 ) * y [ 0 ][ i ]), 1 + h / 2 * p ( x [ i ] ) ) ) y [ 1 ] . hozzáfűz ( div ( - ( 1 - h / 2 * p ( x [ i ] )) * y [ 1 ][ i - 1 ] - ( h ** 2 * q ( x [ i ]) - 2 ) * y [ 1 ][ i ], 1 + h / 2 * p ( x [ i ] ) ) plt . plot ( x , [ get_solv_y_i ( i ) for i in range ( n + 1 )]) plt . mutasd () i esetén az ( n ) tartományban : nyomtatás ( x [ i ], get_solv_y_i ( i ))

Jegyzetek

  1. Kalitkin N. N. Numerikus módszerek M.: Nauka, 1978