2010-02-13 41 views
9

tôi có chức năng sau:MATLAB: Làm thế nào để chuyển một tham số cho một hàm?

function ypdiff = ypdiff(t,y) 
    a = 0.01; 
    b = 0.1; 
    ypdiff(1) = -a*y(1)*y(2); 
    ypdiff(2) = b*y(1)*y(2)-b*y(2); 
    ypdiff(3) = b*y(2); 
    ypdiff = [ypdiff(1) ypdiff(2) ypdiff(3)]'; 

Nếu tôi muốn giải quyết việc này, tôi sẽ gọi hàm ode45 như sau:

[t y] = ode45(@ypdiff, [to tf], yo); 

Nhưng nếu tôi muốn vượt qua một tham số để chức năng này, Tôi sẽ sử dụng hàm ode45 như thế nào? Cụ thể, tôi đang cố gắng để xây dựng sau đây:

function ypdiff = ypdiff(t,y,u) 
    a = 0.01; 
    b = 0.1; 
    ypdiff(1) = -a*u*y(1)*y(2); 
    ypdiff(2) = b*u*y(1)*y(2)-b*y(2); 
    ypdiff(3) = b*u*y(2); 
    ypdiff = [ypdiff(1) ypdiff(2) ypdiff(3)]'; 

Trả lời

8

Bạn có thể sử dụng một anonymous function trong matlab (tương tự như các hàm lambda bằng các ngôn ngữ khác):

u = 1.2; 
[t y] = ode45(@(t, y) ypdiff(t, y, u), [to tf], yo); 
+0

lớn ... Cảm ơn rất nhiều .. Tuy nhiên , Tôi không thể làm cho nó hoạt động cho đến khi tôi loại bỏ ':' nhân vật – Legend

+0

yep, đó là một lỗi đánh máy, xin lỗi;) – catchmeifyoutry

+0

Oh ... Cảm ơn bạn đã làm rõ :) – Legend

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