我知道如何使用ode15s或其他MATLAB ODE求解,有什麼我不知道,這是代碼(從CellML)這似乎模糊對我說:將一個奇怪的函數句柄傳遞給MATLAB ode求解器 - 這段代碼是什麼意思?
[VOI, STATES] = ode15s(@(VOI, STATES)computeRates(VOI, STATES, CONSTANTS), tspan, INIT_STATES, options);
更多specifilcly,是什麼意思下面(?):
@(VOI, STATES)computeRates(VOI, STATES, CONSTANTS)
函數的頭, 「computeRates」,如下:
function [RATES, ALGEBRAIC] = computeRates(t, STATES, CONSTANTS)
我知道 「@computeRates」 我安斯功能的手柄,但什麼是
@(VOI, STATES)computeRates(VOI, STATES, CONSTANTS)
爲什麼它放(VOI,STATES)之間@和「computeRates」的含義?
順便提一下,根據MATLAB的幫助,如果我們要集成以下功能:
function dy = rigid(t,y)
dy = zeros(3,1); % a column vector
dy(1) = y(2) * y(3);
dy(2) = -y(1) * y(3);
dy(3) = -0.51 * y(1) * y(2);
,我們只需要編寫:
options = odeset('RelTol',1e-4,'AbsTol',[1e-4 1e-4 1e-5]);
[T,Y] = ode45(@rigid,[0 12],[0 1 1],options)
實際上,您可以將其他參數傳遞給大多數將在t和y之後愉快地傳遞給解決方案函數的ode例程。例如'ode15s(@computeRates,tspan,INIT_STATES,options,CONSTANTS);'可以正常工作,但這種行爲是未記錄的,可能會在將來發生變化。我還應該提到,在這種情況下,同樣的參數也會被附加到事件函數參數等等,而匿名函數形式則不會這樣。 – crobar 2012-01-18 12:25:35