0
我試圖通過使用RK2和RK4的方法來解決matlab中的Lorenz系統。我有一個腳本的兩種方法,現在的問題是如何能夠收斂到以下簡單的列向量:如何在matlab中創建一個函數數組?
y(1) = @(t,y) 10*(y(2)-y(1));
y(2) = @(t,y) y(1)*(28-y(3))-y(2);
y(3) = @(t,y) y(1)*y(2)-8*y(3)/3;
只是一個列向量y。
這是我所期待的,它從來沒有工作過:
y = zeros(3,1);
y(1) = @(t,y) 10*(y(2)-y(1));
y(2) = @(t,y) y(1)*(28-y(3))-y(2);
y(3) = @(t,y) y(1)*y(2)-8*y(3)/3;
和下面是我的RK2功能。我的RK4與這個RK2很相似,但這可以幫助你理解爲什麼我真的需要一個函數向量。
function y = RK2(fcn,lrange,urange,step,init)
%fcn = vector of functions
%lrange = lower bound
%urange = upper bound
%step = number of steps
%init = initial value
row = size(fcn,1);
stepsize = (urange-lrange)/step;
y = zeros(row,step);
%initializing vector of y
y(:,1) = init;
%initial condition
t = zeros(1,step+1);
%initializing vector of t
if row ~= size(init,1)
disp('number of functions and number of initial values do not match');
end
for n = 1:step
t(n) = (n-1)*stepsize;
t(step+1) = urange;
y1 = stepsize.*fcn(t(n),y(:,n));
y2 = stepsize.*fcn(t(n) + stepsize/2, y(:,n) + y1./2);
y(:,n+1) = y(:,n) + y2;
end
感謝亞勒這麼多!!!!!!!!!
您好,感謝您回答我的問題。我只是嘗試了你的回答,看起來它確實使我的功能成爲一個向量。問題是當我嘗試計算這個向量的行數時,它會發出1或「維度參數必須是索引範圍內的正整數標量」。你知道如何解決這個問題嗎?或者如何計算這個向量中的行數,如果我使它成爲一個行向量。非常感謝! – 2014-12-08 01:11:03
'size(y(1,[1; 2; 3]))'不起作用? – David 2014-12-08 01:13:39
嘗試用逗號替換數組中的分號以使行向量不是列向量。 – David 2014-12-08 01:14:51