Tự động tạo ma trận sai phân hữu hạn cho các hệ thống PDE


8

Giả sử rằng bạn có một hệ thống PDE để giải quyết. Ít nhất là để đơn giản, giả sử nó độc lập về thời gian, bán tuyến tính (tuyến tính trong các đạo hàm của nó) được giải quyết trên một lưới hình chữ nhật trong không gian (x, y) và với các điều kiện biên được chỉ định xung quanh. Câu hỏi của tôi là tổng quát hơn, nhưng hãy bắt đầu ở đây.

Có thể có hai biến phụ thuộc là v ( x , y ) . Phương trình tổng quát có thể có dạng:u(x,y)v(x,y)

a(x,y)Yxx+b(x,y)Yyy+cYxy+d(x,y)Yx+e(x,y)Yy=f(x,y,Y)

trong đó tất cả các hàm từ đến e là ma trận 2x2, f là ma trận 2x1 và YaefY

Y(x,y)=(u(x,y)v(x,y))

Giả sử rằng bạn muốn tính một xấp xỉ số khác nhau hữu hạn. Giả sử rằng các điểm lưới cách đều nhau theo x và y. Bạn có thể rời rạc thành N điểm và y thành M điểm. Và sau đó, bạn sẽ xây dựng một giải pháp như một vectơ cột 2 (nm).xNyM

X=(u11un1unmv11vnm)

Sau đó, bạn sẽ giải một số loại phương trình ma trận

(A+B+C+D+E)X=b,

trong đó các ma trận 2nm x 2nm từ đến E là các ma trận sai phân hữu hạn cho các toán tử vi phân tương ứng. Ma trận kết hợp trong ngoặc sẽ có một số loại cấu trúc dải khối. Giá trị cạnh của chúng có thể phức tạp do điều kiện biên.AE

Câu hỏi của tôi rất đơn giản: có cách nào dễ dàng (đặc biệt là trong Matlab ) để tạo ma trận từ đến E không? Hoặc ít nhất, một hướng dẫn đơn giản để tạo tất cả các ma trận cần thiết (ngoại trừ có lẽ các sửa đổi bạn cần cho các điều kiện biên, có thể là một đầu vào thủ công).AE

Vấn đề là tôi có thể làm điều này bằng tay, nhưng đó là (i) rất nhiều đại số; và (ii) chịu nhiều lỗi chính tả và lỗi khi bạn thực hiện.

Chẳng hạn, đây là một mã cung cấp cho bạn tất cả các vectơ cần thiết cho một "ma trận" hữu hạn 1D cho các thứ tự khác nhau của các công cụ phái sinh. Có sự tương tự cho các hệ thống PDE trên máy bay không?

Câu trả lời:


3

Tôi không biết về bất kỳ giải pháp dễ dàng nào nhưng không quá khó để tự động hóa giải pháp này bằng cách sử dụng gói tính toán tượng trưng như Maple hoặc Maxima . Bạn có thể thấy ở đây một ví dụ về ý tưởng này được áp dụng cho phương trình khuếch tán 1D.

Cụ thể, bạn muốn các chức năng LinearAlgebra[GenerateMatrix](trong Maple) hoặc augcoefmatrix(trong Maxima). MATLAB có một hộp công cụ tính toán tượng trưng mà tôi nghĩ cũng có thể được sử dụng cho mục đích này.

Liên quan đến việc tự động hóa việc triển khai, bạn có thể sử dụng CodeGenerationmô-đun trong Maple để xuất mã MATLAB hoặc các chức năng grindfortrantừ Maxima để tạo đầu ra gần với MATLAB.

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.