如果我有一首頌歌,並寫在兩個方面,喜歡這裏:向量化ODE在八度/ Matlab的
function re=rabdab()
x=linspace(0,2000,2000)';
tic;
[T,Y] = ode45(@fun,[x],[0 1 1]);
[T,Y] = ode45(@fun,[x],[0 1 1]);
[T,Y] = ode45(@fun,[x],[0 1 1]);
toc;
tic;
[A,B] = ode45(@fun2,[x],[0 1 1]);
[A,B] = ode45(@fun2,[x],[0 1 1]);
[A,B] = ode45(@fun2,[x],[0 1 1]);
toc;
function dy = fun(t,y)
dy = zeros(3,1); % a column vector
dy = [y(2) * y(3);...
-y(1) * y(3);...
-0.51 * y(1) * y(2);];
function dy = fun2(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);
有時間幾乎沒有差別。一個和另一個一樣長。但我認爲fun
是fun2
的矢量化版本。還是我誤解了? 目的是加快我的代碼一點。該示例取自matlab網頁。 我想我還沒有真正理解「矢量化」的含義。 如果這已經被矢量化了,那麼非矢量化的代碼是什麼樣的?
感謝您讓我擺脫這種困惑。所以,使用ode23可能會更快,因爲它不夠準確,但矢量化不是問題。但是,由於你的解釋,我可以找出我可以矢量化的代碼中的其他角落。 – lyvic