Python mô phỏng đối lưu

Khi tôi còn học đại học vật lý vài năm trước, tôi nhớ có một nhiệm vụ là giải phương trình nhiệt bằng phương pháp phân tích cho một số bài toán đơn giản. Trong học kỳ tiếp theo, chúng ta đã học về các phương pháp số để giải một số phương trình đạo hàm riêng [PDE] nói chung. Thật thú vị khi xem cách chúng tôi có thể giải quyết chúng bằng số và trực quan hóa các giải pháp dưới dạng bản đồ nhiệt và điều đó thực sự thú vị [ý định chơi chữ]. Tôi cũng nhớ, trong học kỳ trước, chúng tôi đã học ngôn ngữ lập trình C, vì vậy việc giải các PDE bằng C là điều đương nhiên mặc dù một số sinh viên gặp khó khăn với C chứ không phải tự giải PDE. Nếu hồi đó tôi biết cách viết mã bằng Python, tôi sẽ sử dụng nó thay vì C [mặc dù tôi không nói C là xấu]. Ở đây, tôi sẽ chỉ ra cách chúng ta có thể giải phương trình nhiệt 2D bằng số và xem việc “dịch” các phương trình sang mã Python dễ dàng như thế nào

Trước khi chúng ta viết mã Python, hãy nói về phương trình nhiệt và phương pháp sai phân hữu hạn. Phương trình nhiệt về cơ bản là một phương trình vi phân từng phần, nó là

Nếu chúng ta muốn giải nó ở dạng 2D [Cartesian], chúng ta có thể viết phương trình nhiệt ở trên như thế này

trong đó u là đại lượng mà chúng ta muốn biết, t là biến thời gian, x và y là biến không gian và α là hằng số khuếch tán. Vì vậy, về cơ bản, chúng tôi muốn tìm nghiệm u ở mọi nơi theo x và y, và theo thời gian t

Bây giờ hãy xem phương pháp sai phân hữu hạn [FDM] một cách ngắn gọn. Phương pháp sai phân hữu hạn là một phương pháp số để giải các phương trình vi phân bằng cách lấy gần đúng đạo hàm với sai phân hữu hạn. Hãy nhớ rằng định nghĩa của đạo hàm là

Trong phương pháp sai phân hữu hạn, ta tính gần đúng và loại bỏ giới hạn. Vì vậy, thay vì sử dụng ký hiệu vi phân và giới hạn, chúng tôi sử dụng ký hiệu delta là sự khác biệt hữu hạn. Lưu ý rằng điều này được đơn giản hóa quá mức, bởi vì chúng tôi phải sử dụng khai triển chuỗi Taylor và rút ra nó từ đó bằng cách giả sử một số thuật ngữ đủ nhỏ, nhưng chúng tôi có ý tưởng sơ bộ đằng sau phương pháp này

Trong phương pháp sai phân hữu hạn, chúng ta sẽ “rời rạc hóa” miền không gian và khoảng thời gian x, y và t. Chúng ta có thể viết nó như thế này

Tọa độ Descartes, trong đó trục x và y dành cho các biến không gian và t dành cho biến thời gian [các trục tọa độ từ GeoGebra, do tác giả chỉnh sửa]

Như chúng ta có thể thấy, i, j và k lần lượt là các bước cho mỗi khác biệt đối với x, y và t. Những gì chúng tôi muốn là giải pháp u, đó là

Lưu ý rằng k là chỉ số trên để biểu thị bước thời gian cho u. Chúng ta có thể viết phương trình nhiệt ở trên bằng phương pháp sai phân hữu hạn như thế này

Nếu chúng ta sắp xếp phương trình trên bằng cách lấy Δx = Δy, chúng ta sẽ nhận được phương trình cuối cùng này

ở đâu

Chúng ta có thể sử dụng khuôn tô này để ghi nhớ phương trình trên [xem các chỉ số i, j cho các bước không gian và chỉ số trên k cho bước thời gian]

Phương pháp rõ ràng stencil [hình ảnh của tác giả]

Chúng tôi sử dụng phương pháp rõ ràng để có được giải pháp cho phương trình nhiệt, vì vậy nó sẽ ổn định về số bất cứ khi nào

Mọi thứ đã sẵn sàng. Bây giờ chúng ta có thể giải phương trình nhiệt ban đầu xấp xỉ bằng phương trình đại số ở trên, thân thiện với máy tính. Đối với một bài tập, giả sử một tấm mỏng hình vuông có cạnh dài 50 đơn vị. Nhiệt độ mọi nơi bên trong đĩa ban đầu là 0 độ [tại t = 0], hãy xem sơ đồ bên dưới [điều này không thực tế, nhưng nó tốt cho việc tập thể dục]

Điều kiện biên và ban đầu cho bài toán của chúng ta [ảnh của tác giả]

Đối với mô hình của chúng ta, hãy lấy Δx = 1 và α = 2. 0. Bây giờ chúng ta có thể sử dụng mã Python để giải quyết vấn đề này bằng số để xem nhiệt độ ở mọi nơi [ký hiệu là i và j] và theo thời gian [ký hiệu là k]. Trước tiên hãy nhập tất cả các thư viện cần thiết, sau đó thiết lập các điều kiện biên và ban đầu

Ta đã thiết lập điều kiện ban đầu và điều kiện biên, hãy viết hàm tính toán theo phương pháp sai phân hữu hạn mà ta đã suy ra ở trên

Hãy chuẩn bị chức năng biểu đồ để chúng ta có thể hình dung giải pháp [cho mỗi k] dưới dạng bản đồ nhiệt. Chúng tôi sử dụng thư viện Matplotlib, rất dễ sử dụng

Một điều nữa mà chúng tôi cần là tạo hiệu ứng cho kết quả vì chúng tôi muốn xem các điểm nhiệt độ bên trong tấm thay đổi theo thời gian. Vì vậy, hãy tạo chức năng để tạo hiệu ứng cho giải pháp

Bây giờ, chúng ta đã hoàn thành. Hãy xem mã hoàn chỉnh bên dưới và chạy nó

Đó là nó. Và đây là kết quả

Giải pháp số của bài tập phương trình nhiệt đơn giản của chúng tôi

Thật tuyệt phải không? . // thay thế. it/languages/python3, đảm bảo bạn thay đổi max_iter_time thành 50 trước khi chạy mã để làm cho kết quả lặp lại nhanh hơn

Được rồi, bây giờ chúng ta có mã, hãy chơi với thứ gì đó thú vị hơn, hãy đặt tất cả các điều kiện biên thành 0, sau đó chọn ngẫu nhiên điều kiện ban đầu cho lưới bên trong

Và đây là kết quả

Giải pháp số trong đó tất cả các điều kiện biên bằng 0 với điều kiện ban đầu ngẫu nhiên bên trong lưới

Python tương đối dễ học cho người mới bắt đầu so với các ngôn ngữ lập trình khác. Tôi khuyên bạn nên sử dụng Python để giải quyết các vấn đề tính toán như chúng ta đã làm ở đây, ít nhất là để tạo nguyên mẫu vì nó có các thư viện khoa học và số thực sự mạnh mẽ. Cộng đồng cũng ngày càng lớn mạnh hơn và điều đó có thể giúp mọi thứ trở nên dễ dàng hơn với Google khi chúng ta mắc kẹt với nó. Python có thể không nhanh bằng C hoặc C++, nhưng khi sử dụng Python, chúng ta có thể tập trung nhiều hơn vào việc giải quyết vấn đề hơn là ngôn ngữ, tất nhiên chúng ta vẫn cần biết cú pháp Python và thao tác mảng đơn giản của nó ở một mức độ nào đó, nhưng một khi chúng ta

Tăng cấp mã hóa

Cảm ơn vì đã là một phần của cộng đồng của chúng tôi. Tăng cấp đang chuyển đổi tuyển dụng công nghệ. Tìm công việc hoàn hảo của bạn tại các công ty tốt nhất

Chủ Đề