?? odefile.m
字號:
function varargout = odefile(t,y,flag,p1,p2)
% odefile.m 是MATLAB提供的模板文件。用戶可根據需要,使用任何其他文件名。
% varargout 是MATLAB專門設計的"變長度"輸出宗量。它由元胞數組構成,因此
% 可適應任意多個、任意形式的輸出宗量。請參看第7.5.2節。
% t 自變量。不管在下面指令中是否出現,自變量t必須作為第一輸入宗量。
% y 一階微分方程組的列向量形式函數。它必須作為第二輸入宗量。
% flag 切換變量。它必須處在第三輸入宗量位置。用戶無須也不要對它直接賦
% 值;它的賦值由微分方程解算指令(solver),自動產生。
% p1, p2 是被傳遞的參數。這里,作為示意,僅列出兩個。
% 根據需要,傳遞參數的數目不受限制。
% 以下是switch-case構成的多向選擇控制。應注意:
% (A)各情況的情況表達式是MATLAB規定的,不得任意改變。
% (B)各情況所執行的任務也是規定的,不得任意改變。
% (C)各情況內,變長輸出宗量元胞數是規定的,不得任意改變。
% (D)各情況內,(等式右邊的)函數名稱可以改變,但相應子函數名稱要一致。
% (E)各情況內,(等式右邊的)函數中所包含的t , y 是必須的,
% 不管它們是否以顯式出現相應子函數體中。
% (F)各情況內,(等式右邊的)函數中所包含的p1, p2 是傳遞參數的示意性表示。
% 具體參數視需要而定,只要該參數已經傳入odefile.m 函數內存。
switch flag
case '' % 規定空字符串 '' 情況:專管一階導數 dy/dt = f(t,y)的計算
varargout{1} = f(t,y,p1,p2);
case 'init' % 規定 'init' 情況:專管三個宗量 [tspan , y0 , options]的設置。
[varargout{1:3}] = init(p1,p2);
case 'jacobian' % 規定 'jacobian' 情況:專管計算解析的 Jacobian 矩陣 df/dy。
varargout{1} = jacobian(t,y,p1,p2);
case 'jpattern' % 規定 'jpattern' 情況:專管計算稀疏的數值 Jacobian 矩陣 df/dy。
varargout{1} = jpattern(t,y,p1,p2);
case 'mass ' % 規定 'mass' 情況:專管計算質量矩陣(mass matrix)。
varargout{1} = mass(t,y,p1,p2);
case 'events' % 規定'events'情況:專管事件定義和判斷
[varargout{1:3}] = events(t,y,p1,p2);
otherwise
error(['Unknown flag ''' flag '''.']);
end
% 以下是odefile.m 的子函數,它們分別與"父"函數中各情況對應。
%---------------------------------------------------------------------------
function dydt = f(t,y,p1,p2)
% 空字符串 '' 情況內調用的子函數:專管一階導數 dy/dt的計算
% dydt 一階導數。該變量名可由用戶按需要取名。
% 下面函數內容,由用戶自己編寫,最后產生輸出dydt 。
dydt =〈由用戶編寫〉
% ---------------------------------------------------------------------------
function [tspan,y0,options] = init(p1,p2)
% 'init' 情況內調用的子函數:專管三個宗量 [tspan , y0 , options]的設置。
% 三個輸出宗量的名稱可由用戶自起,但各位置上宗量的性質不能改變。
% 下面函數內容,由用戶自己編寫,最后產生輸出三個輸出 。
tspan =〈積分的時間區段或時間點集〉
y0 =〈初值〉
options =〈或用 odeset 設置算法參數,或用空陣符 [ ] 表示缺省設置〉
% ---------------------------------------------------------------------------
function dfdy = jacobian(t,y,p1,p2)
% 'jacobian' 情況調用的子函數:專管計算解析的 Jacobian 矩陣 df/dy。
% 輸出宗量的名稱可由用戶自起。
% 下面函數內容,由用戶自己編寫,最后產生輸出輸出dfdy 。
dfdy =〈 Jacobian 矩陣〉
% ---------------------------------------------------------------------------
function S = jpattern(t,y,p1,p2)
% 'jpattern' 情況調用的子函數:專管計算解析的 Jacobian 矩陣 df/dy。
% 輸出宗量的名稱可由用戶自起。
% 下面函數內容,由用戶自己編寫,最后產生輸出S 。
S =〈稀疏形式的數值 Jacobian 矩陣〉
% ---------------------------------------------------------------------------
function M = mass(t,y,p1,p2)
% 'mass' 情況調用的子函數:專管計算質量矩陣(mass matrix)。解剛性方程時用。
% 輸出宗量的名稱可由用戶自起。
% 下面函數內容,由用戶自己編寫,最后產生輸出M 。
M =〈質量矩陣〉
% --------------------------------------------------------------------------
function [value,isterminal,direction] = events(t,y,p1,p2)
% 'events' 情況內調用的子函數:專管三個宗量 [value,isterminal,direction]的設置。
% 三個輸出宗量的名稱可由用戶自起,但各位置上宗量的性質不能改變。
% 下面函數內容,由用戶自己編寫,最后產生輸出三個輸出 。
value =〈各元素是標量事件函數,即函數穿越0點為事件〉
direction =〈各元素定義事件函數穿越方式:1為向正穿越0;-1為向負穿越0;0不管方向〉
isterminal =〈各元素定義事件發生后計算是否繼續:1為終止計算;0為繼續計算〉
% --------------------------------------------------------------------------
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -