Skydemetode

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 21. september 2018; checks kræver 6 redigeringer .

Skydemetoden (grænseværdiproblem) er en numerisk metode , som består i at reducere grænseværdiproblemet til et eller andet Cauchy-problem for det samme system af differentialligninger . Nederste linje: den første løsning med en successiv ændring i argumentationen og gentagelse af beregninger bliver mere nøjagtig

Beskrivelse af metoden

Problemet for et system af to første-ordens ligninger med randbetingelser af en generel form betragtes:

system



grænseforhold




Algoritme

1. Betingelsen er valgt vilkårligt .

2. Den venstre grænsebetingelse betragtes som en algebraisk ligning . Vi bestemmer den værdi, der opfylder den .

3. Værdier vælges som startbetingelserne for Cauchy-problemet for det pågældende system, og dette Cauchy-problem er integreret ved enhver numerisk metode (for eksempel ifølge Runge-Kutta-skemaerne).

4. Som et resultat opnås en løsning, der afhænger af η som parameter.

Værdien vælges således, at den fundne løsning opfylder den venstre grænsebetingelse. Imidlertid opfylder denne løsning generelt set ikke den højre grænsebetingelse: når den erstattes, den venstre side af den højre grænsebetingelse, betragtet som en funktion af parameteren :

,

vil ikke gå til nul.

5. Parameteren η vælges i henhold til betingelsen for at finde en sådan værdi, som med den nødvendige nøjagtighed.

Således er løsningen af ​​grænseværdiproblemet reduceret til at finde roden til en algebraisk ligning . [en]

Et eksempel på et Python-program

import matplotlib.pyplot som plt import numpy som 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 ): returner 1 def q ( x ): returner 1 def f ( x ): returner 3 * ( np . e ** x ) def get_c1 (): global n return ( B - y [ 0 ][ n ]) / y [ 1 ][ n ] def get_solv_y_i ( i ): returner y [ 0 ][ i ] + get_c1 () * y [ 1 ][ i ] x = np . linspace ( a , b , n + 1 ) def div ( a , b ): returnere a / b for i i området ( 1 , n ): y [ 0 ] . tilføje ( 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 ] . tilføj ( 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 i området ( n + 1 )]) plt . vis () for i i området ( n ): print ( x [ i ], get_solv_y_i ( i ))

Noter

  1. Kalitkin N. N. Numeriske metoder M.: Nauka, 1978