Próbuję rozwiązać równanie doradcze, ale w rozwiązaniu pojawia się dziwna oscylacja, gdy fala odbija się od granic. Jeśli ktokolwiek widział ten artefakt wcześniej, byłbym zainteresowany, aby poznać przyczynę i jak jej uniknąć!
To jest animowany gif, otwarty w osobnym oknie, aby wyświetlić animację (będzie odtwarzany tylko raz lub nie od razu zostanie buforowany!)
Zauważ, że propagacja wydaje się bardzo stabilna, dopóki fala nie zacznie odbijać się od pierwszej granicy. Jak myślisz, co może się tu dziać? Kilka dni spędziłem na sprawdzaniu kodu i nie mogę znaleźć żadnych błędów. Jest to dziwne, ponieważ wydaje się, że istnieją dwa rozwiązania propagujące: jedno pozytywne i jedno negatywne; po odbiciu od pierwszej granicy. Rozwiązania wydają się przemieszczać wzdłuż sąsiednich punktów siatki.
Szczegóły implementacji znajdują się poniżej.
Równanie doradcze,
gdzie to prędkość propagacji.
Crank-Nicolson jest bezwarunkową (pdf link) stabilną dyskretyzacją dla równania doradczego, pod warunkiem, że powoli zmienia się w przestrzeni (zawiera tylko składowe niskich częstotliwości po transformacji Fouriera).
Zastosowałem dyskretyzację,
Umieszczenie niewiadomych po prawej stronie umożliwia zapisanie tego w formie liniowej,
gdzie (aby przyjąć średnią czasową równomiernie ważoną między punktem bieżącym a przyszłym) i .R = V Δ t
Te równania mają postać macierzy , gdzie,
Wektory i są znanymi i nieznanymi wielkościami, dla których chcemy rozwiązać.U N + 1
Następnie stosuję zamknięte warunki brzegowe Neumanna na lewej i prawej granicy. Przez zamknięte granice rozumiem na obu interfejsach. W przypadku zamkniętych granic okazuje się, że (nie pokażę tutaj mojej pracy) musimy tylko rozwiązać powyższe równanie macierzowe. Jak wskazał @DavidKetcheson, powyższe równania macierzowe faktycznie opisują warunki brzegowe Dirichleta . W przypadku warunków brzegowych Neumanna
Aktualizacja
Zachowanie wydaje się dość niezależne od wyboru stałych, których używam, ale są to wartości wykresu, które widzisz powyżej:
- = 2
- dx = 0,2
- dt = 0,005
- = 2 (gaussowski hwhm)
- = 0,5
Aktualizacja II
Symulacja z niezerowym współczynnikiem dyfuzji, (patrz komentarze poniżej), oscylacja zanika, ale fala już nie odbija !? Nie rozumiem dlaczego?