Differansemetoder for to-punkts randverdiproblemer. Innledning. Anne Kværnø

Like dokumenter
Dette kan selvfølgelig brukes direkte som en numerisk tilnærmelse til den deriverte i et gitt punkt.

Partielle differensialligninger. Problemstilling. Anne Kværnø

Numerisk løsning av ikke-lineære ligninger

Stive differensialligninger

Numerisk løsningn av ordinære differensialligninger

Numerisk løsning av PDL

MA2501 Numeriske metoder

EKSAMEN I NUMERISK LØSNING AV DIFFERENSIALLIGNINGER MED DIFFERANSEMETODER (TMA4212)

Eksamen i TMA4122 Matematikk 4M

Eksamensoppgave i TMA4135 Matematikk 4D

TMA4122/TMA4130 Matematikk 4M/4N Høsten 2010

Eksamen i TMA4123/TMA4125 Matematikk 4M/N

Eksamensoppgave i TMA4135 Matematikk 4D

MAT Oblig 1. Halvard Sutterud. 22. september 2016

Løsningsforslag MAT102 Vår 2018

EKSAMEN I NUMERISK LØSNING AV DIFFERENSIALLIGNINGER MED DIFFERANSEMETODER (TMA4212)

Eksamensoppgave i TMA4130/35 Matematikk 4N/4D

TMA4210 Numerisk løsning av part. diff.lign. med differansemetoder Vår 2005

Homogene lineære ligningssystem, Matriseoperasjoner

Matematikk Eksamensaktuelle numerikk-oppgåver

1. Finn egenverdiene og egenvektorene til matrisen A = 2 1 A =

a) Ved numerisk metode er det løst en differensiallikning av et objekt som faller mot jorden. Da, kan vi vi finne en tilnærming av akselerasjonen.

Numerisk løsning av ODL

EKSAMENSOPPGAVE / EKSAMENSOPPGÅVE

Vær OBS på at svarene på mange av oppgavene kan skrives på flere ulike måter!

LO510D Lin.Alg. m/graf. anv. Våren 2005

Notat 2, ST Sammensatte uttrykk. 27. januar 2006

Lineære likningssystemer

TMA4123/TMA4125 Matematikk 4M/4N Vår 2013

UNIVERSITETET I BERGEN

Strøm av olje og vann i berggrunnen matematisk model, simulering og visualisering

Masteroppgave i matematikk

Eksamensoppgave i TMA4135 Matematikk 4D

I dag skal vi ved hjelp av ganske enkel Python-kode finne ut om det er mulig å tjene penger på å selge og kjøpe en aksje.

UNIVERSITETET I OSLO

Fasit MAT102 juni 2016

s 2 Y + Y = (s 2 + 1)Y = 1 s 2 (1 e s ) e s = 1 s s2 s 2 e s. s 2 (s 2 + 1) 1 s 2 e s. s 2 (s 2 + 1) = 1 s 2 1 s s 2 e s.

Strøm av olje og vann i berggrunnen matematisk model, simulering og visualisering

TMA4123M regnet oppgavene 2 7, mens TMA4125N regnet oppgavene 1 6. s 2 Y + Y = (s 2 + 1)Y = 1 s 2 (1 e s ) e s = 1 s s2 s 2 e s.

Polynomisk interpolasjon

Diskretisering av varmeledningsligningen

Lineær uavhengighet og basis

Numerisk Integrasjon

Obligatorisk oppgave MAT-INF Lars Kristian Henriksen UiO

EKSAMEN I EMNET MAT160 Beregningsalgoritmer 1 Mandag 12 februar 2007 LØSNINGSFORSLAG

f (x) = a 0 + a n cosn π 2 x. xdx. En gangs delvisintegrasjon viser at 1 + w 2 eixw dw, 4 (1 + w 2 ) 2 eixw dw.

Eksamensoppgave i MA2501 Numeriske metoder

UNIVERSITETET I OSLO

Generell informasjon om faget er tilgjengelig fra It s learning. 1 En kort oppsummering Adaptiv filtrering 2. 3 Prediksjon 4

MA1201, , Kandidatnummer:... Side 1 av 5. x =.

EKSAMEN I FAG SIF5050 NUMERISK LØSNING AV PARTIELLE DIFFERENSIALLIGNINGER VED HJELP AV ELEMENTMETODEN

Løsningsførslag i Matematikk 4D, 4N, 4M

Matematikk Øvingsoppgaver i numerikk leksjon 9. Løsningsforslag

Vektorligninger. Kapittel 3. Vektorregning

Løsningsforslag til eksamen i MA0002, Brukerkurs i matematikk B

=cos. =cos 6 + i sin 5π 6 = =cos 2 + i sin 3π 2 = i.

7 Rayleigh-Ritz metode

Notat 2, ST januar 2005

Gauss-Jordan eliminasjon; redusert echelonform. Forelesning, TMA4110 Fredag 18/9. Reduserte echelonmatriser. Reduserte echelonmatriser (forts.

Løsningsforslag. Innlevering i BYFE/EMFE 1000 Oppgavesett 1 Innleveringsfrist: 14. september klokka 14:00 Antall oppgaver: 3.

Forside. 1 Hva skrives ut?

Eksamen TMA desember 2009

K Andre Ordens Differensialligninger

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Matematikk Øvingsoppgaver i numerikk leksjon 6. Løsningsforslag

Notat 4 - ST februar 2005

UNIVERSITETET I OSLO

Øvingsforelesning 1 Python (TDT4110)

Matriser. Kapittel 4. Definisjoner og notasjon

LØSNINGSFORSLAG EKSAMEN MA0002, VÅR 09

EKSAMENSOPPGAVE / EKSAMENSOPPGÅVE

Repetisjon, del 2. TDT 4110 IT Grunnkurs Professor Guttorm Sindre

TMA4100 Matematikk 1 Høst 2014

Bootstrapping og simulering Tilleggslitteratur for STK1100

Newtons metode er en iterativ metode. Det vil si, vi lager en funksjon. F x = x K f x f' x. , x 2

Oppsummering TMA4100. Kristian Seip. 26./28. november 2013

være en rasjonal funksjon med grad p < grad q. La oss skrive p(x) (x a)q(x) = A

Øvingsforelesning i Matlab TDT4105

Om plotting. Knut Mørken. 31. oktober 2003

Oppgave 1.6 Hva skrives ut? Riktig svar: The total rainfall from June to August was 54.00

Semesteroppgave. TMA4215 Numerisk Matematikk Gruppe nr. 6 Kristian Stormark og Bjørn E. Vesterdal. Høst 2003

12 Projeksjon TMA4110 høsten 2018

TMA Kræsjkurs i Matlab. Oppgavesett 1/3

Lineære ligningssystemer. Forelesning, TMA4110 Torsdag 17/9. Lineære ligningssystemer (forts.) Eksempler

MA0002 Brukerkurs i matematikk B Vår 2013

Øvingsforelesning i Matlab TDT4105

3.9 Teori og praksis for Minste kvadraters metode.

Eksamensoppgave i MA1201 Lineær algebra og geometri

Løsningsforslag eksamen i TMA4123/25 Matematikk 4M/N

Divide-and-Conquer. Lars Vidar Magnusson

Elementære eliminasjonsmatriser

Matematikk Øvingsoppgaver i numerikk leksjon 11 Eulers metode. Løsningsforslag

Dato: Tirsdag 28. november 2006 Lengde på eksamen: 4 timer Tillatte hjelpemidler: Kun standard enkel kalkulator, HP 30S

Eksamen IRF30014, våren 16 i Matematikk 3 Løsningsforslag

Oppsummering TMA4100. Kristian Seip. 17./18. november 2014

Alle svar skal grunngis. Alle deloppgaver har lik vekt.

MAT1120 Plenumsregningen torsdag 26/8

MAT 1110: Obligatorisk oppgave 1, V-07: Løsningsforslag

Transkript:

Differansemetoder for to-punkts randverdiproblemer. Anne Kværnø Innledning Tidligere i kurset har dere diskutert parabolske, elliptiske og hyperbolske differensialligninger, og hvordan disse kan løses eksakt ved hjelp av separasjon av variable og Fourier-rekker. Her skal vi se på hvordan slike ligninger kan løses numerisk ved hjelp av endelig differanse-metoder. Det er ikke lenger snakk om å lage en genererisk algoritme for å løse en stor gruppe av differensialligninger, men om en teknikk som må anvendes på den ligningen en nå har for hånden. Så lær deg teknikken og ideene, ikke pugg formler! I dette notatet introduserer vi ideen på et to-punkts randverdiproblem. Følgende differanseformler kommer til å bli hyppig brukt:

Et to-punkts randverdiproblem Gitt differensialligningen der, er gitt funksjoner og og er gitte konstanter. En endelig differansemetode anvendt på denne ligningen består av følgende trinn: Algoritme (diskretisering) 1. Partisjoner intervallet i deler,, og la,. Punktene kalles gitterpunkter. 2. For hvert gitterpunkt, bruk differanseformler for å approksimere og. Sett disse inn i differensialligningen. Bruker vi sentraldifferanser i begge tilfellene vil det gi oss følgende: For hvert indre punkt : 3. La være den numeriske tilnærmelsen til. Vi finner denne ved å erstatte med i uttrykket over og med. Dette gir oss diskretiseringen av differensialligningen: Dette er et lineært ligningssystem på formen der er en matrise og. 4. Løs ligningssystemet med hensyn på. La oss se litt mer nøyaktig på hvordan og ser ut. Hvis vi mulitpliserer ligningene i indre punkter med og rydder opp, vil matrisa bli en tridiagonal matrise Vektoren er

Eksempel Gitt differensialligningen (Den eksakte løsningen er ). Finn først en differensemetode for denne ligningen for en vilkårlig. La så, og bruk differenseformlene for å finne tilnærmelser til, og. Svar: Vi har at og,. Bruk de sentrale differanseformlene for og og sett dem inn i ligningen: La. Multipliser med på begge sider, tar hensyn til at og og rydd opp: For er, og ligningssystemet blir: Første og siste ligning er trivielle å løse, så i realiteten er dette et ligningssystem med 3 ukjente: Løsningen av ligningssystemet er Til sammenligning er den eksakte løsningen i disse punktene

Randbetingelser Tidligere i dette kurset har ulike randbetingelser blitt diskutert. Disse er grovt sett: 1. Dirichlet-betingelsen: Løsningen er kjent på randa. 2. Neumann-betingelsen: Den deriverte av løsningen er kjent på randa. 3. Robin-betingelsen (eller en blandet betingelse): En kombinasjon av disse. I eksempelet over har vi bare hatt Dirichlet-betingelser. Nå skal vi se hvordan vi kan håndtere Neumannbetingelsen. Robin-betingelsen håndteres tilsvarende. Anta at vi har et to punkts randverdiproblem over et intervall, og at randbetingelsen i er av Neumann type, dvs. for en gitt verdi. Algoritmen over følges som før, med et unntak: Nå er også ukjent, og vi trenger en differanseligning for punktet. Den enkleste muligheten er å bruke en foroverdifferanse men dette er en tilnærmelse av orden 1, mens vi ellers har brukt tilnærmelser av orden 2. Nøyaktigheten blir dårligere. Et bedre alternativ er å bruke ideen med en falsk rand. Anta at løsningen strekker seg utover intervallet, helt til det fiktive gitterpunktet, der vi har en tilnærmet, og like fiktiv løsning. Da er det to ligninger som kan brukes i gitterpunktet : Differanseformelen for ligningen, og en sentraldifferanse for randbetingelsen, begge av orden 2: Løs den siste ligningen med hensyn til den fiktive løsningen slik at første ligningen, og vi får følgende ligning for :, sett dette inn i den Eksempel Gitt samme ligning som før, men med en Neumann-betingelse i randpunktet : Den eksakte løsningen er. Ligningen for randdpunktet blir: Etter å ha inkludert ligningen for og multiplisert med på begge sider får vi systemet

som, for og blir: med løsning Implementasjon: La oss implementere denne teknikken for et randverdiproblem med konstante koeffisienter, dvs. med konstante og. Vi må altså sette opp og løse ligningssystemet. For å kunne kunne håndtere både Dirichlet og Neumann betingelser, la dette være et system, med Den første ligningen blir en av: Den siste ligningen blir for en Dirichletbetingelse, det overlates til leseren å finne den riktige ligningen for en Neumann-betingelse og å implementere denne i koden under. 1. Velg, la og,. 2. Sett opp matrisen og vektoren. er en tridiagonal matrise, som med unntak av første og siste rad har elementene under diagonalen, på diagonalen og på diagonalen. Sett opp vektoren med elementene for. Første og siste element avhenger av randbetingelsene. 3. Løs ligningssystemet. Som testproblem bruker vi ligningen over, med en av randbetingelsene med løsning.

In [1]: # Importer nødvendige moduler, og sett parametre for plotting. # Dette må alltid kjøres først! %matplotlib inline from numpy import * # Matematiske funksjoner og lin.alg. from scipy.sparse import diags from scipy.linalg import solve from matplotlib.pyplot import * # Grafikk newparams = {'figure.figsize': (8.0, 4.0), 'axes.grid': True, 'lines.markersize': 8, 'lines.linewidth': 2, 'font.size': 14} rcparams.update(newparams) from numpy import * Vi starter med å implementere en hjelpefunksjon tridiag(v, d, w, N) som lager en tridiagonal matrise. Første og siste rad modifiseres etter hva slags randbetingelser vi har. In [2]: def tridiag(v, d, w, N): # Hjelpefunksjon. # Lager en tridiagonal matrise A=tridiag(v, d, w) av dimensjon N x N. e = ones(n) # array [1,1,...,1] av lengde N A = v*diag(e[1:],-1)+d*diag(e)+w*diag(e[1:],1) return A In [3]: # Definer ligningen # u'' + p*u' + q*u = r(x) på intervallet [a,b] # Randbetingelser: u(a)=ua eller u'(a)=dua # u(b)=ub p = 2 q = -3 def r(x): return 9*x a, b = [0, 1] # Velg randbetingelse for x=a: type_randbetingelse = 'Dirichlet' # 'Neumann' eller 'Dirichlet' ua = 1 # Randbetingelse u(a) dua = -4 # Randbetingelse u'(a) # Bare Dirichletbetingelsen for x=b implementert foreløbig. ub = exp(-3)+2*exp(1)-5 # Randbetingelse u(b) # Den eksakte løsningen (for sammenligning) def u_eksakt(x): return exp(-3*x)+2*exp(x)-3*x-2

In [4]: # Sett opp og løs differanseligningen. N = 4 # Start diskretiseringen h = (b-a)/n x = linspace(a, b, N+1) # Antall intervaller # Steglengde # Gitterpunkter x_0=a, x_1=a+h,..., x_n=b # Sett opp et utkast til A-matrisen (første og siste rad justeres senere) v = 1-0.5*h*p # Under diagonalen (subdiagonal) d = -2+h**2*q # Diagonal w = 1+0.5*h*p # Over diagonalen (superdiagonal) A = tridiag(v, d, w, N+1) # Setter opp et utkast til b-vektoren b = h**2*r(x) # Juster første og siste ligning, avhengig av randbetingelsene # Venstre rand x=a: if type_randbetingelse == 'Neumann': A[0,1] = 2 b[0] = b[0]+(2*h-p*h**2)*dua else: A[0,0] = 1 A[0,1] = 0 b[0] = ua # Dirichlet-betingelse # Høyre rand x=b: Bare Dirichlet er implementert A[N,N] = 1 A[N,N-1] = 0 b[n] = ub U = solve(a, b) # Løs ligningssystemet In [5]: # Skriv ut matrisen, vektoren og løsningen (hvis den er tilgjengelig) print('a =\n', A) print('\nb =\n ', b) print('\nu =\n ', U) print('\nu(x)=\n', u_eksakt(x)) A = [[ 1. 0. 0. 0. 0. ] [ 0.75-2.1875 1.25 0. 0. ] [ 0. 0.75-2.1875 1.25 0. ] [ 0. 0. 0.75-2.1875 1.25 ] [ 0. 0. 0. 0. 1. ]] b = [ 1. 0.140625 0.28125 0.421875 0.48635073] U = [ 1. 0.29317568 0.02555744 0.09382011 0.48635073] u(x)= [ 1. 0.29041739 0.0205727 0.08939926 0.48635073]

In [6]: # Plott numerisk og eksakt løsning plot(x,u,'.-') plot(x, u_eksakt(x),':') # Plott eksakt løsning, hvis den er tilgje ngelig. xlabel('x') ylabel('u') legend(['numerisk','eksakt']) title('løsningen av et to-punkt randverdiproblem.'); In [7]: # Plott feilen u(x)-u i gitterpunktene feil = abs(u_eksakt(x)-u) plot(x, feil,'.-') xlabel('x') ylabel('feil') title('feil: u(x)-u '); print('maks feil = ', max(feil)) Maks feil = 0.00498473484646