Ampumismenetelmä

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 21. syyskuuta 2018 tarkistetusta versiosta . tarkastukset vaativat 6 muokkausta .

Ampumismenetelmä (raja-arvoongelma) on numeerinen menetelmä , jossa raja -arvoongelma pelkistetään johonkin Cauchyn ongelmaan samalle differentiaaliyhtälöjärjestelmälle . Bottom line: ensimmäinen ratkaisu, jossa argumentti muuttuu peräkkäin ja laskelmia toistetaan, tulee tarkemmaksi

Menetelmän kuvaus

Tarkastellaan kahden ensimmäisen kertaluvun yhtälön järjestelmän ongelmaa yleisen muodon reunaehtojen kanssa:

järjestelmä



rajaolosuhteet




Algoritmi

1. Ehto valitaan mielivaltaisesti .

2. Vasenta reunaehtoa pidetään algebrallisena yhtälönä . Määritämme arvon, joka tyydyttää sitä .

3. Arvot valitaan Cauchyn ongelman alkuehdoksi tarkasteltavalle järjestelmälle, ja tämä Cauchyn ongelma integroidaan millä tahansa numeerisella menetelmällä (esimerkiksi Runge-Kutta-kaavioiden mukaisesti).

4. Tuloksena saadaan ratkaisu , joka riippuu parametrista η.

Arvo valitaan siten, että löydetty ratkaisu täyttää vasemman reunaehdon. Tämä ratkaisu ei kuitenkaan yleisesti ottaen täytä oikeanpuoleista reunaehtoa: kun se korvataan, oikeanpuoleisen reunaehdon vasen puoli, jota pidetään jonkin parametrin funktiona :

,

ei mene nollaan.

5. Parametri η valitaan sen ehdon mukaan, että löydetään sellainen arvo, jolle vaaditulla tarkkuudella.

Siten raja-arvotehtävän ratkaisu pelkistetään yhden algebrallisen yhtälön juuren löytämiseen . [yksi]

Esimerkki Python-ohjelmasta

tuonti matplotlib.pyplot as plt tuonti numpy as 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 ): paluu 1 def q ( x ): paluu 1 def f ( x ): paluu 3 * ( np . e ** x ) def get_c1 (): yleinen n paluu ( 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 ): palauttaa a / b i :lle alueella ( 1 , n ) : y [ 0 ] . liitä ( 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 ] . liitä ( 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 . piirrä ( x , [ get_selv_y_i ( i ) for i alueella ( n + 1 )] ) plt . näytä () i :lle alueella ( n ) : tulosta ( x [ i ], get_solv_y_i ( i ))

Muistiinpanot

  1. Kalitkin N. N. Numeeriset menetelmät M.: Nauka, 1978