Dao động lạ khi giải phương trình thăng tiến bằng sai phân hữu hạn với các điều kiện biên Neumann đóng hoàn toàn (phản xạ tại các biên)


33

Tôi đang cố gắng giải phương trình thăng tiến nhưng có một dao động lạ xuất hiện trong lời giải khi sóng phản xạ từ ranh giới. Nếu bất cứ ai đã nhìn thấy vật phẩm này trước khi tôi quan tâm để biết nguyên nhân và làm thế nào để tránh nó!

Đây là một gif hoạt hình, mở trong cửa sổ riêng biệt để xem hoạt hình (nó sẽ chỉ phát một lần hoặc không ngay khi nó được lưu vào bộ nhớ cache!) Tuyên truyền xung Gaussian

Lưu ý rằng sự lan truyền có vẻ rất ổn định cho đến khi sóng bắt đầu phản xạ từ ranh giới đầu tiên. Bạn nghĩ gì có thể xảy ra ở đây? Tôi đã dành vài ngày để kiểm tra mã của mình và không thể tìm thấy bất kỳ lỗi nào. Thật kỳ lạ vì dường như có hai giải pháp lan truyền: một tích cực và một tiêu cực; sau khi phản ánh từ ranh giới đầu tiên. Các giải pháp dường như đang đi dọc theo các điểm lưới liền kề.

Các chi tiết thực hiện theo.

Phương trình thăng tiến,

ut=vux

trong đó là tốc độ lan truyền.v

Crank-Nicolson là sự rời rạc ổn định vô điều kiện (liên kết pdf) cho phương trình tiến lên với điều kiện thay đổi chậm trong không gian (chỉ chứa các thành phần tần số thấp khi biến đổi Fourier).u(x)

Sự rời rạc mà tôi đã áp dụng là,

ϕjn+1ϕjnΔt=v[1β2Δx(ϕj+1nϕj1n)+β2Δx(ϕj+1n+1ϕj1n+1)]

Đặt các ẩn số ở phía bên tay phải cho phép điều này được viết ở dạng tuyến tính,

βrϕj1n+1+ϕjn+1βrϕj+1n+1=(1β)rϕj1n+ϕjn+(1β)rϕj+1n

trong đó (lấy trung bình thời gian có trọng số đồng đều giữa điểm hiện tại và tương lai) và .β=0.5r=vΔt2Δx

Các bộ phương trình này có dạng ma trận , trong đó,Aun+1=Mun

A=(1βr0βr1βrβr1βr0βr1)

M=(1(1β)r0(1β)r1(1β)r(1β)r1(1β)r0(1β)r1)

Các vectơ và là số lượng đã biết và chưa biết về số lượng chúng ta muốn giải quyết.unun+1

Sau đó tôi áp dụng các điều kiện biên Neumann đã đóng ở ranh giới bên trái và bên phải. Theo các ranh giới khép kín, ý tôi là trên cả hai giao diện. Đối với các ranh giới khép kín, hóa ra (tôi sẽ không thể hiện công việc của mình ở đây) chúng ta chỉ cần giải phương trình ma trận trên. Như @DavidKetcheson đã chỉ ra, các phương trình ma trận trên thực sự mô tả các điều kiện biên Dirichlet . Đối với điều kiện biên Neumann,ux=0

A=(100βr1βrβr1βr001)

Cập nhật

Hành vi có vẻ khá độc lập với sự lựa chọn các hằng số tôi sử dụng, nhưng đây là các giá trị cho cốt truyện bạn thấy ở trên:

  • v = 2
  • dx = 0,2
  • dt = 0,005
  • σ = 2 (Gaussian hwhm)
  • β = 0,5

Cập nhật II

Một mô phỏng với hệ số khuếch tán khác không, (xem bình luận bên dưới), dao động biến mất, nhưng sóng không còn phản xạ nữa!? Tôi không hiểu tại sao?D=1

Khuếch tán và thăng tiến


Bạn đã làm gì cho ? v
chris

v=2 trong các mô phỏng đó. Tôi sẽ cập nhật với các thiết lập mô phỏng. Ý tưởng tốt.
boyfarrell

Sau đó, tôi sẽ mong đợi điều kiện ban đầu sẽ được chuyển sang bên phải và biến mất qua ranh giới bên phải. Tất cả những gì xuất hiện trong tâm trí là sơ đồ trung tâm có thể đưa ra các dao động giả trừ khi áp dụng cho phương trình khuếch tán tiến với số Peclet của ô bên dưới 2. Có lẽ hãy thử sơ đồ hướng gió?
chris

Bạn có nghĩ rằng có thể có dấu hiệu lỗi với phương trình. Trên thực tế, mục tiêu cuối cùng của tôi là áp dụng điều này với phương trình khuếch tán. Tôi hiện đang thử nghiệm các trường hợp giới hạn khác nhau. Trong ví dụ trên, hệ số khuếch tán được đặt thành không. Tôi đã bao gồm một hình ảnh động mới ở trên. Tôi không hiểu tại sao đỉnh không phản ánh khi hệ số khuếch tán là khác không? Nó thực hiện chính xác như bạn đã đề cập (ngoài hướng).
boyfarrell

Tôi đã nghĩ đến , vì vậy dấu hiệu này là ok. Cốt truyện thứ hai nhìn ok với tôi. Tại sao bạn mong đợi bất cứ điều gì để phản ánh? Điều đó chỉ có thể xảy ra nếu thay đổi dấu hiệu nào đó. Hãy thử với sơ đồ hướng gió để tiến lên thay vì lược đồ trung tâm, sau đó bạn sẽ thấy một cái gì đó tương tự cho . tu+vxu=0vD=0
chris

Câu trả lời:


28

Phương trình bạn đang giải quyết không cho phép các giải pháp đúng đắn, do đó không có điều kiện nào là điều kiện biên phản ánh cho phương trình này. Nếu bạn xem xét các đặc điểm, bạn sẽ nhận ra rằng bạn chỉ có thể áp đặt một điều kiện biên ở đúng ranh giới. Bạn đang cố gắng áp đặt một điều kiện biên Dirichlet đồng nhất ở ranh giới bên trái, không hợp lệ về mặt toán học.

Để nhắc lại: phương pháp đặc tính nói rằng giải pháp phải không đổi dọc theo bất kỳ dòng nào có dạng cho bất kỳ hằng số . Do đó, giải pháp dọc theo ranh giới bên trái được xác định bởi giải pháp tại thời điểm sớm hơn trong miền vấn đề của bạn; bạn không thể áp đặt một giải pháp ở đó.xνt=CC

Không giống như phương trình, sơ đồ số của bạn không thừa nhận các giải pháp đúng đắn. Các chế độ đi phải được gọi là chế độ ký sinh và liên quan đến tần số rất cao. Lưu ý rằng sóng phải là gói sóng răng cưa, được liên kết với các tần số cao nhất có thể được biểu thị trên lưới của bạn. Làn sóng đó hoàn toàn là một tạo tác bằng số, được tạo ra bởi sự rời rạc của bạn.

Để nhấn mạnh: bạn chưa viết ra vấn đề giá trị ranh giới ban đầu đầy đủ mà bạn đang cố gắng giải quyết. Nếu bạn làm như vậy, nó sẽ rõ ràng rằng nó không phải là một vấn đề được đặt ra về mặt toán học.

Tuy nhiên, tôi rất vui vì bạn đã đăng bài này lên đây, vì đây là một minh họa tuyệt đẹp về những gì có thể xảy ra khi bạn phân biệt một vấn đề không được đặt ra và về hiện tượng của chế độ ký sinh. +1 lớn cho câu hỏi của bạn từ tôi.


cảm ơn bạn đã thảo luận và sửa chữa. Tôi đã đánh giá cao rằng ma trận sẽ không có các tính chất giống như phương trình vi phân. Thêm ý kiến ​​để theo dõi ...
boyfarrell

Vâng, bây giờ tôi thấy làm thế nào đây thực sự là những điều kiện biên Dirichlet mà tôi đã ghi chú ở trên để chỉnh sửa. Đây là lần đầu tiên tôi cố gắng thực sự hiểu được quá trình giải các phương trình này, tôi tiếp tục va chạm trên đường. Tôi rất vui khi được đăng tiến bộ của tôi!
boyfarrell

@David Ketcheson: Tôi đang gặp vấn đề tương tự và đã đăng vấn đề của mình trong liên kết sau scicomp.stackexchange.com/questions/30329/. Bạn có thể giải thích cho tôi tại sao bạn nói rằng vấn đề không "được đặt ra về mặt toán học" ? Cảm ơn.
Herman Jaramillo

@HermanJaramillo Bạn đang cố gắng áp đặt một giá trị giải pháp ở ranh giới bên trái, nơi nó đã được xác định bởi PDE. Bất kỳ sách giáo khoa bao gồm một cuộc thảo luận về sự tiến bộ cũng sẽ chỉ ra các điều kiện biên hợp lệ là gì và tại sao. Tôi đã thêm một đoạn thứ hai với lời giải thích bổ sung; Hy vọng rằng sẽ giúp.
David Ketcheson

1
@HermanJaramillo: về cơ bản không phải là "được đặt ra về mặt toán học" có nghĩa là bạn có hai phương trình cho một giá trị hàm tại đường biên, điều kiện biên cũng như chính PDE. Nói chung, hai phương trình đó mâu thuẫn với nhau. Tổng quát hơn, người ta có thể coi đây là một vấn đề tối ưu hóa trong đó cả hai mục tiêu đều được thỏa mãn tốt nhất có thể.
davidhigh

0

Tôi đã học được rất nhiều từ các câu trả lời ở trên. Tôi muốn bao gồm câu trả lời này bởi vì tôi tin rằng nó cung cấp những hiểu biết khác nhau cho vấn đề.

Chúng ta hãy xem xét phương trình eqnarray với wavespeed không đổi .

uxx+1cutt=0.
c

Nếu không có điều kiện ban đầu và giới hạn, phương trình này có nghiệm có dạng . (một xung di chuyển sang phải)u(x,t)=f(xct)

Nếu chúng ta áp đặt điều kiện ban đầu , thì nghiệm của phương trình trong khoảng là . Không có ranh giới và đó là giải pháp.u(x,t0)=p(x)x(,)p[xc(tt0)]

Bây giờ, chúng ta hãy giả sử rằng chúng ta xác định một miền giới hạn , sau khi tất cả các máy tính có bộ nhớ hạn chế. Sau đó, chúng ta cần xác định các giá trị tại và , nếu không tính toán chúng ta bị mắc kẹt.x[a,b]ab

Một cách để xác định các điều kiện biên là sử dụng Dirichlet trên ranh giới bên trái và một điều kiện phù hợp với giải pháp đang được truyền bá. Nghĩa là, chúng ta có thể định nghĩa (giả sử thời gian ban đầu ) t0

u(a,t0)=0,u(b,t0)=p[bc(tt0)].

Điều này tạo ra một xung chạy sang phải cho đến khi nó biến mất ở cạnh phải.

đẩy vào đây để hoạt hình trên Dirichlet trên ranh giới bên trái

Tôi vẫn nhận được một số tiếng ồn mà tôi không thể hiểu được (ai có thể giúp tôi ở đây không?)

Tùy chọn khác là áp đặt các điều kiện biên định kỳ. Đó là thay vì áp đặt điều kiện biên Dirichlet ở bên trái, chúng ta có thể áp đặt gói sóng phù hợp với ranh giới bên trái. Đó là:

u(a,t0)=p[ac(tt0)],u(b,t0)=p[bc(tt0)].

Tuy nhiên, for và và vì chúng tôi cần đặt dữ liệu trong khoảng chúng tôi thêm một "khoảng thời gian" có độ dài và sau đó chúng tôi tìm thấy , do đó điều kiện bên trái sẽ là (tương tự!) và chúng tôi sẽ có một xung thoát ra bên phải và nhập vào bên trái.ac(tt0)<at>t0c>0[a,b]baac(tt0)+ba=a+b(tt0)u(a,t0)=p[bc(tt0]

Liên kết này cho thấy những gì tôi sẽ gọi các điều kiện biên định kỳ.

Tôi đã tạo ra các hình ảnh động trong python và lược đồ này là sơ đồ Crank-Nicholson như được chỉ ra trong câu hỏi ở đây.

Tôi vẫn đang vật lộn với mô hình nhiễu sau khi sóng chạm đến ranh giới đầu tiên (phải).


1
Tôi không thể nhìn thấy hình ảnh động trong điện thoại di động của mình, nhưng tôi tin rằng kiểu nhiễu của bạn là do thiếu độ chính xác về số. Sự hấp thụ chỉ hoạt động vì bạn áp đặt giải pháp chính xác trên ranh giới. Viết giải pháp chính xác này, giải pháp số đến ranh giới bên phải hơi khác nhau về tần số và pha. Điều này một lần nữa dẫn đến sự phản ánh và do đó can thiệp.
davidhigh

@davidhigh: Cảm ơn thông tin của bạn. Tôi sẽ kiểm tra điều này. Tôi xin lỗi hoạt hình không hoạt động trong điện thoại của bạn. Nó cũng không hoạt động trong điện thoại của tôi (Samsung). Đây có thể là một số phần mềm bị thiếu trong điện thoại. Nó nên hoạt động trong một máy tính. Cảm ơn một lần nữa.
Herman Jaramillo

Không có gì. Bản thân hình ảnh động không quá quan trọng, tôi chỉ muốn xem các lỗi lớn như thế nào. Btw, bằng cách áp đặt giải pháp chính xác cho ranh giới, bạn tránh được "tình trạng xấu" theo thiết kế. Nghĩa là, bạn vẫn có hai phương trình cho một giá trị tại biên, nhưng bằng cách sử dụng kết quả chính xác, bạn buộc chúng phải nhất quán. Nhưng điều này chỉ hoạt động xấp xỉ, vì kết quả số không hoàn toàn chính xác.
davidhigh

Và một nhận xét khác: giải pháp phân tích chung cho phương trình sóng là sự chồng chất của một xung di chuyển sang trái và một chuyển động phải. Trong trường hợp của bạn, bạn chỉ xem xét xung chuyển động phải, vì vậy bạn đã áp dụng các điều kiện ban đầu - trái ngược với những gì bạn nêu trong văn bản.
davidhigh

@davidhigh: Tôi đã suy nghĩ một chút về những hiểu biết của bạn về tiếng ồn sau khi xung chạm đến ranh giới. Tôi tin rằng bạn đã đúng và có một sự khác biệt giữa giải pháp phân tích chính xác và xung lan truyền số. Trong ranh giới mà sự khác biệt nhỏ tạo ra mô hình tiếng ồn nhỏ nhìn thấy ở đó. Hệ thống cải tiến CN được trình bày trong cuộc thảo luận này là phân tán và tôi tin rằng trong khi sự phân tán không được chú ý trước khi xung chạm đến ranh giới, nó có thể kích hoạt nhưng nhiễu loạn nhỏ (sự khác biệt giữa các giải pháp phân tích và số) ở ranh giới. Cảm ơn một lần nữa.
Herman Jaramillo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.