Runge-Kutta và tái sử dụng dữ liệu


11

Tôi đang cố gắng thực hiện phương pháp Runge-Kutta bậc bốn để giải quyết ODE bậc một trong Python tức là . Tôi hiểu phương thức này hoạt động như thế nào, nhưng tôi đang cố gắng viết một thuật toán hiệu quả để giảm thiểu số lần được tính toán vì điều này khá tốn kém. Tôi đã được thông báo rằng có thể sử dụng lại các điểm dữ liệu đã được tính toán trước đó khi bạn tăng dần qua các bước nhưng không thể thấy được. Có ai biết làm thế nào để làm điều này hoặc là không thể?f(x,y)dydx=f(x,y)f(x,y)


Nghiên cứu "ghi nhớ". Bạn có thể dễ dàng "bọc" của bạn f(x,y)để kết quả được ghi nhớ.

2
@ S.Lott: Thuật ngữ này là "ghi nhớ", không có "r".

1
@DietrichEpp: Hoàn toàn chính xác. Mac OS X có trình kiểm tra chính tả mới, tích cực và không có hiểu biết về kỹ thuật.

Đây có phải là hệ thống bậc 2 được mô phỏng theo phương pháp bậc 4 không?

Đây là một danh sách lớn các giải pháp thay thế: google.com/, Bất kỳ một trong số chúng có thể sẽ hữu ích.

Câu trả lời:


8

Nếu bạn đang đi từ yp_1 = f(x_1, y_1)để yp_2 = f(x_1+h, y_2)bạn sẽ cần các điểm trung gian:

K1 = f(x_1+h/2, y_1+h/2*yp_1)
K2 = f(x_1+h/2, y_1+h/2*K1)
K3 = f(x_1+h, y_1+h*K2)

x_2 = x_1 + h
y_2 = y_1 + h/6*(yp_1+2*K1+2*K2+K3)
yp_2 = f(x_2, y_2)

Nói chung, không có điểm trung gian nào hữu ích trong bước tiếp theo. Vì K1<> K2K3<> yp_2.


4

Nói chung, các phương pháp Runge-Kutta theo thứ tự yêu cầu ít nhất là đánh giá hàm và hoàn toàn không có cách nào để tránh điều này. Quá khứ họ yêu cầu nhiều hơn đánh giá chức năng.N N = 4 NN NN=4N

Nếu bạn muốn sử dụng lại các đánh giá chức năng trong quá khứ, bạn cần sử dụng phương pháp nhiều bước như Adams-Bashforth.

Trong mọi trường hợp bạn trả tiền cho mỗi chiến lược. Các phương thức một bước đòi hỏi số lượng đánh giá hàm lớn nhất, nhưng các phương thức nhiều bước có yêu cầu bộ nhớ lớn nhất.

Chỉnh sửa: Sửa lỗi. Tuyên bố của tôi chỉ đúng với các phương pháp rõ ràng. Tình hình ít rõ ràng hơn đối với các phương thức ngầm định vì số lượng giai đoạn không chuyển trực tiếp sang số lượng đánh giá chức năng.


Tôi có lẽ nên cụ thể hơn một chút. Xem Butcher để biết thêm chi tiết: Butcher, JC và J. Wiley. Phương pháp số cho phương trình vi phân thông thường. Thư viện trực tuyến Wiley, 2008. Tài liệu tham khảo tuyệt vời cho các giải pháp ODE và cũng cung cấp rất nhiều bằng chứng không tồn tại cho các phương pháp RK (ví dụ: không tồn tại phương pháp 5 Runge-Kutta, chỉ sử dụng 4 đánh giá chức năng.)
Reid.Atcheson

1
Để đầy đủ: yêu cầu của bạn không đúng với "phương pháp Runge-Kutta chung" mà chỉ đúng với phương pháp Runge-Kutta rõ ràng .
David Ketcheson

Rất tiếc! Bạn nói đúng, xin lỗi về điều đó.
Reid.Atcheson

1

Tôi biết rằng bạn đang sử dụng Phương pháp Runge-Kutta để giải quyết ODE của mình, nhưng nếu bạn muốn sử dụng lại các giá trị được tính toán cũ của f (x, y), bạn có thể muốn xem xét các phương thức nhiều bước, như Adams-Bashforth hoặc Adams-Moulton phương pháp. Tất nhiên, nhược điểm của các phương pháp này là bạn không thể sử dụng bước thời gian thích ứng rất dễ dàng.


0

Vui lòng kiểm tra các phương thức "nhúng": mục tiêu trong loại phương pháp RK này là có hai phương thức với các thứ tự khác nhau, trong đó phương thức bậc cao sử dụng các đánh giá hàm giống như phương thức bậc thấp. Điều này cho phép ước tính lỗi rất hiệu quả. Xem tr.165 và hơn thế nữa về "Giải các phương trình vi phân thông thường I: Các vấn đề không quan trọng" của Hairer, Norsett và Wanner. Ví dụ điển hình là các phương pháp Fehlberg của thứ tự 7 (8).

Ngoài ra, nếu bạn đang tìm cách giải quyết ODE trong PYTHON, hãy kiểm tra assimulo . Tôi đã chơi với gói này trong một vài tuần và khá vui.

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.