2011-10-06 53 views
6

Tôi mới với Matlab. Tôi hy vọng bạn có thể giúp tôi. Tôi phải giải quyết một hệ thống ODE sử dụng hàm ODE45. Đây là hàm mô tả phương trình của tôi.Matlab ode45. Làm thế nào để thay đổi một tham số bên trong nó trong khi gọi nó?

function dNdt = rateEquations(t, y) 
    %populations of corresponding state 
    Ng = y(1); 
    Ns = y(2); 
    Nt = y(3); 

    %All constants used are dropped for the sake of easy reading. 

Lưu ý các tham số F.

%rate equations 
    dNs = s0 * Ng * F - Ns/ t_S1; 
    dNt = Ns/t_ISC - Nt/t_T1; 
    dNg = -dNt - dNs; 

    dNdt = [dNg; dNs; dNt]; 

end 

Sau đó, trong kịch bản .m file của tôi gọi hàm ode45 trong 'Vòng lặp for'. Trong mỗi lần lặp, tôi phải thay đổi tham số F và chuyển nó vào hàm 'rateEquations' của tôi. Nhưng tôi không biết làm thế nào để nhận ra nó.

for T = Tmin: dt : Tmax 
    %initial conditions 
    initialConditions = [N0 0 0]; 
    timeSpan = [T T+dt]; 

trước khi gọi ODE45 F sẽ được thay đổi.

[t,N] = ode45('rateEquations', timeSpan, initialConditions) 

và vân vân ...

end 

Cảm ơn trước.

Trả lời

7

Bạn muốn làm F một cuộc tranh cãi về chức năng phái sinh của bạn và vượt qua các chức năng ẩn danh quyền ode45:

[t,N] = ode45(@(t,y) rateEquations(t,y,F), timeSpan, initialConditions) 
+0

Yeah, nó hoạt động. Cảm ơn rất nhiều. Đó là những gì tôi đang tìm kiếm. :) – jacksonslsmg4

+0

Bạn cũng có thể làm điều này với các biến toàn cục. Nhưng tôi đã cố gắng sử dụng tính toán song song (parfor) và điều đó không giống như các biến toàn cầu. Nhưng điều này không làm việc với parfor. – fibonatic

+0

@Nzbuu, Nếu tôi làm điều này, tôi có cần sử dụng nội suy không? – kyle

Các vấn đề liên quan