Zapisywanie macierzy różnic skończonych równania Poissona z warunkami brzegowymi Neumanna

15

Interesuje mnie rozwiązanie równania Poissona przy użyciu metody różnic skończonych. Chciałbym lepiej zrozumieć, jak zapisać równanie macierzowe z warunkami brzegowymi Neumanna. Czy ktoś sprawdziłby następujące, czy to prawda?

Macierz różnic skończonych

Równanie Poissona,

2)u(x)x2)=re(x)

można aproksymować równaniem macierzowym różnicy skończonej,

1(Δx)2)M.u^=re^

w którym oznacza n x n matrycy i u i d jest 1 x n (kolumna) wektoryM.n×nu^re^1×n

Macierz różnic skończonych równania Poissona

Dodanie warunku brzegowego Neumanna

Warunek brzegowy Neumanna wymusza znany strumień na granicy (tutaj stosujemy go po lewej stronie, gdzie granica wynosi ),x=0

zapisując ten warunek brzegowy jako wyśrodkowaną różnicę skończoną,

u(x=0)x=σ

Błąd w równaniu. NB Pierwotnie popełniłem tutaj błąd, znak błędu i nie dzielę przez 2. Poniższe poprawki zostały poprawione.

u2)-u02)Δx=σ

Zwróć uwagę na wprowadzenie punktu siatki poza pierwotną domeną ( ). Termin ten można wyeliminować wprowadzając drugie równanie, u 0 - 2 u 1 + u 2u0

u0-2)u1+u2)(Δx)2)=re1

Równanie powstaje z posiadania większej ilości informacji z powodu wprowadzenia nowego punktu siatki. Pozwala nam zapisać podwójną pochodną jako granicę w u u 0, stosując wyśrodkowaną różnicę skończoną.u1u0

Część, której nie jestem pewien

Łącząc te dwa równania mogą być wyeliminowane. Aby pokazać działanie, najpierw zorganizujmy nieznane,u0

u0=-2)σΔx+u2)u0=(Δx)2)re1+2)u1-u2)

Następnie są one równe i przestawiane w formę,

u2)-u1(Δx)2)=re12)+σΔx

Wybrałem tę formę, ponieważ jest to ta sama forma, co równanie macierzowe powyżej. Zauważ, żewarunki u są dzielone przez ( Δ x ) 2 zarówno tutaj, jak i w pierwotnym równaniu. Czy to jest właściwe podejście?u(Δx)2)

Wreszcie, używając tego równania jako pierwszego rzędu macierzy,

Równanie Poissona z warunkiem brzegowym Neumanna po lewej stronie (poprawione)

Kilka ostatnich myśli,

  1. Czy ta ostatnia matryca jest poprawna?
  2. Czy mogłem zastosować lepsze podejście?
  3. Czy istnieje standardowy sposób pisania tej matrycy?
boyfarrell
źródło
2
2)Δxu0=-σΔx+u2)
3
Całkiem ładnie to rozwiązano w tekście skończonej różnicy LeVeque , rozdział 2
David Ketcheson
1
Kwestie te są również dobrze wyjaśnione w scientificpython.net/1/post/2013/01/...
Evgeni Siergiejew
czy mógłbyś zobaczyć ten scicomp.stackexchange.com/questions/14306/…
usumdelphini

Odpowiedzi:

1

u0

Cofnij się i pomyśl przez chwilę o problemie. Określenie równania Laplace'a zasadniczo stwierdza, że ​​każdy punkt jest średnią jego sąsiadów. Zwykle jest to wizualizowane jako arkusz gumy i pomaga mi myśleć o tych rzeczach. (Poisson jest podobny w / mniej lub bardziej rozciągliwych punktach)

Gdy określisz wartość powierzchni rozwiązania na najbardziej zewnętrznych krawędziach, „przypinasz” arkusz w tych punktach w przestrzeni. Kiedy określasz arkusz za pomocą jego pochodnej na krawędziach, istnieje dowolna liczba rozwiązań, które spełniają równanie, które są translacjami arkusza w przestrzeni, zachowując ten sam faktyczny kształt, a zatem pochodne.

u0=0

meawoppl
źródło
1
Tak więc na ogół równanie Poissona rozwiązuje się za pomocą co najmniej jednego warunku brzegowego Dirichleta, aby można było znaleźć unikalne rozwiązanie? Wydaje mi się, że ma to sens, że warunki brzegowe Neumanna mają sens tylko wtedy, gdy uwzględnione jest źródło i ujścia, w przeciwnym razie istnieje nieskończona liczba rozwiązań. Jeśli jednak wezmę równanie dyfuzji, czasami warunki brzegowe Neumanna są wymagane dla poprawnej fizyki (np. Brak strumienia wielkości przez granicę, gdy du / dx = 0). Właśnie to mnie naprawdę interesuje. Czy powyższa metoda jest właściwym podejściem do zastosowania BC Neumanna?
boyfarrell
1
Nie można stosować paczek Neumann BC na wszystkich stronach papieru. Jeśli to zrobisz, nie będziesz mieć unikalnego rozwiązania. Musi być przypięty przynajmniej z jednej strony.
vanCompute
@meawoppl: W jaki sposób określa się punkt stały, wykonując również bezpośrednie rozwiązanie macierzy?
jvriesem
Zwykle wystarczy przypisać punkt do stałej, ustawiając tylko jeden termin z rzędu na 1, pozostałe zero i wartość na RHS odpowiadającą płaszczyźnie rozwiązania, którą chcesz zobaczyć.
meawoppl