2013-03-20 20 views
6

tôi muốn để lưu trữ các bước hội nhập khác nhau được thực hiện bởi người giải quyết riêng của mình khi tôi gọi nó là:Python - scipy: mô-đun thơ ca ngợi: Vấn đề cho phép tùy chọn bước của giải

solver1.integrate(t_end) 

Vì vậy, tôi đã làm một vòng lặp while và kích hoạt tùy chọn bước thiết lập giá trị của nó để True:

while solver1.successful() and solver1.t < t0+dt: 
    solver1.integrate(t_end,step=True) 
    time.append(solver1.t) 

Sau đó, tôi âm mưu y, kết quả của hội nhập và ở đây có vấn đề của tôi. Tôi có những bất ổn mà xuất hiện trong một khu vực nằm:

y enabling the step option of the solver

Tôi nghĩ đó là vì các vòng lặp hoặc một cái gì đó như thế nên tôi đã kiểm tra kết quả loại bỏ các step:

while solver1.successful() and solver1.t < t0+dt: 
    solver1.integrate(t_end) 

Và bất ngờ. .. Tôi có kết quả chính xác:

y disabling the step option of the solver

Đó là từ bỏ e tình hình kỳ lạ ... Tôi sẽ biết ơn nếu một người nào đó của bạn có thể giúp tôi với vấn đề này.

EDIT:

Để thiết lập các giải tôi làm:

solver1 = ode(y_dot,jac).set_integrator('vode',with_jacobian=True) 
solver1.set_initial_value(x0,t0) 

Và tôi lưu trữ các kết quả sử dụng .append()

+0

Can bạn hiển thị thêm một số mã của bạn, cách bạn thiết lập trình giải quyết và lưu trữ kết quả để vẽ đồ thị? – silvado

+0

Tất nhiên, tôi vừa mới chỉnh sửa câu hỏi của mình. – kuider

+0

Bạn vẫn chưa chỉ ra cách bạn đang thực sự lưu trữ trạng thái ODE hiện tại mà bạn đang vẽ, giả sử rằng các ô hiển thị một trong các biến trạng thái ODE. – Nikolas

Trả lời

2

Khi bạn thiết lập step=True bạn đang gián tiếp đưa ra các vode._integrator.runner (một chương trình con Fortran) hướng dẫn sử dụng itask=2 và mặc định là itask=1. Bạn có thể biết thêm chi tiết về runner làm điều này:

r._integrator.runner? 

Trong scipy 0.12.0 tài liệu bạn sẽ không tìm thấy một lời giải thích về những gì đang xảy ra cho khác nhau itask=1 hoặc itask=2, but you can find it here:

ITASK = An index specifying the task to be performed. 
!   Input only. ITASK has the following values and meanings. 
!   1 means normal computation of output values of y(t) at 
!    t = TOUT(by overshooting and interpolating). 
!   2 means take one step only and return. 
!   3 means stop at the first internal mesh point at or 
!    beyond t = TOUT and return. 
!   4 means normal computation of output values of y(t) at 
!    t = TOUT but without overshooting t = TCRIT. 
!    TCRIT must be input as RUSER(1). TCRIT may be equal to 
!    or beyond TOUT, but not behind it in the direction of 
!    integration. This option is useful if the problem 
!    has a singularity at or beyond t = TCRIT. 
!   5 means take one step, without passing TCRIT, and return. 
!    TCRIT must be input as RUSER(1). 
Các vấn đề liên quan