Phương pháp euler-cromer con lắc python

Nếu có nhiều độ cong trong hàm y[t], dự đoán này có thể khác xa giá trị chính xác. Có thể dự đoán chính xác hơn nếu người ta sử dụng hệ số góc của y[t] tại một số điểm giữa t và $t+\Delta t$. Sự khác biệt duy nhất giữa phương pháp này và phương pháp Euler là đánh giá f[y,t] tại trung điểm. Giá trị của t tại điểm giữa chỉ là $t+\Delta t/2$, trong khi giá trị của y tại điểm giữa có thể được tìm thấy bằng phương pháp Euler

Kỹ thuật này được gọi là phương pháp Runge-Kutta bậc hai. Đầu tiên tìm các giá trị ở phía trước nửa bước [theo thời gian]

$t_m = t + \Delta t / 2 \\ y_m = y[t] + \Delta t / 2 \cdot f[y,t] $

Sau đó, sử dụng các giá trị ở giữa bước này để tiến một bước đầy đủ

$y[t+\Delta t] = y[t] + \Delta t \cdot f[y_m,t_m] $

Tập thể dục. Sửa đổi mã con lắc của bạn để sử dụng phương pháp Runge-Kutta. Liệu nó bảo tồn tổng năng lượng?

#Euler Method
for n in range[N-1]:
  theta[n+1] = theta[n] + dt * omega[n]
  omega[n+1] = omega[n] + dt * [-g/L*sin[theta[n]]]
#Runge-Kutta Method
for n in range[N-1]:
  # half-step uses only values from step [n] on the right-hand side
  theta_mid = theta[n] + 0.5*dt * omega[n]
  omega_mid = omega[n] + 0.5*dt * [-g/L*sin[theta[n]]]

  # full-step uses midpoint values on the right-hand side
  theta[n+1] = theta[n] + dt * omega_mid
  omega[n+1] = omega[n] + dt * [-g/L*sin[theta_mid]]

Bây giờ chúng ta có một đoạn mã hoạt động để mô phỏng chuyển động đung đưa của một con lắc đơn giản, chúng ta có thể mở rộng mô hình của mình sang bài toán thú vị hơn về con lắc bị điều khiển. Chúng ta sẽ thêm hai thuật ngữ vào mô hình toán học của mình, một thuật ngữ để giải thích cho sự tắt dần do ma sát, thuật ngữ còn lại để mô hình hóa một động lực bên ngoài.

Sự tắt dần ma sát tỷ lệ thuận với vận tốc góc; . Chúng ta sẽ tham số hóa giảm xóc bằng cách sử dụng một biến, q, với giá trị là đơn vị thứ tự

Lực điều khiển sẽ có một số tần số vốn có liên quan đến nó, sao cho lực này đang cố gắng điều khiển con lắc dao động ở tần số điều khiển. Mô hình toán học thu được của con lắc điều khiển, tắt dần của chúng ta là

$\ddot \theta = -\omega_p^2 \sin\theta - q \dot\theta + F_D \sin [\Omega_D t] $

Tập thể dục. Thêm hai số hạng này vào chương trình con lắc của bạn và tính $\theta[t]$ cho các giá trị của động lực bằng 0. 0, 0. 5 và 1. 2. Sử dụng hệ số tắt dần, q=0. 5, tần số lái xe $\Omega_D = 2/3$ và $g = L = 9. 8$

Chúng tôi tìm thấy ba hành vi khá khác nhau tùy thuộc vào giá trị của động lực. Không dẫn động nhưng có tắt dần, con lắc cố gắng dao động ở tần số tự nhiên của nó, nhưng biên độ nhanh chóng giảm đi do tắt dần do ma sát. Với một lực điều khiển vừa phải, con lắc ổn định chuyển động điều hòa ở tần số điều hòa, không phải tần số tự nhiên của con lắc. Kết quả đáng ngạc nhiên xảy ra đối với các giá trị lớn của động lực. Ở đây, con lắc không tuân theo tần số điều khiển một cách nghiêm túc và trên thực tế không có dấu hiệu của một hành vi định kỳ. Giá trị của theta vượt quá pi theo cả chiều dương và chiều âm, cho thấy rằng con lắc đơn giản của chúng ta đã xoay hết cỡ trên trục của nó. Chính chế độ này mà chúng ta mô tả là hỗn loạn, nhưng một hệ thống hỗn loạn thực sự có nghĩa là gì?

Hỗn loạn
Một đặc điểm của hệ thống hỗn loạn là nó không thể đoán trước, nhưng chúng ta không "dự đoán" chuyển động của con lắc bằng mã máy tính của mình sao? . Nếu chúng tôi chạy chương trình của mình với các điều kiện ban đầu giống hệt nhau, ngoại trừ khi chạy có theta ban đầu khác 0. 001, chúng ta thấy rằng các con lắc chuyển động giống hệt nhau trong một khoảng thời gian nhất định. Tuy nhiên, cuối cùng, chuyển động của chúng khác nhau.

Do đó, thuật ngữ không thể đoán trước đề cập đến thực tế là người ta sẽ cần biết các điều kiện ban đầu để có độ chính xác cao tùy ý nếu muốn dự đoán chuyển động chính xác của một hệ thống hỗn loạn trong bất kỳ thời gian dài nào.

Phân công. Nghiên cứu các chuyển động phân kỳ của hai con lắc gần như giống hệt nhau như là một chức năng của sự khác biệt trong các điều kiện ban đầu của chúng. Có phải các đường dẫn luôn phân kỳ, bất kể điều kiện ban đầu của chúng nhỏ như thế nào?

Các phương pháp Runge-Kutta bậc cao hơn
Người ta có thể mở rộng các hiệu chỉnh 'điểm giữa' này lên bậc cao hơn. Trên thực tế, thuật ngữ phương pháp Runge-Kutta thường đề cập đến phiên bản thứ tư. Trước khi mô tả phương pháp RK4 này, hãy quay lại và viết ra phương pháp bậc hai bằng các thuật ngữ đơn giản hơn một chút. Ở đây chúng ta xem xét hàm f[y,t] và kích thước bước của h trong biến độc lập, t.

$y[t+h] = y[t] + h \cdot f_1 $

ở đâu

$f_0 = f[y_0, t_0] \\ f_1 = f[y_0 + 0. 5h f_0, t_0 + 0. 5h] \\ f_2 = f[y_0 + 0. 5h f_1, t_0 + 0. 5h] \\ f_1 = f[y_0 + h f_2, t_0 + h] $

Chủ Đề