如何在matlab中创建一个函数数组?
问题描述:
我试图通过使用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
感谢亚勒这么多!!!!!!!!!
答
这应该工作,才使函数输出向量:
y = @(t,y) [10*(y(2)-y(1)), y(1)*(28-y(3))-y(2), y(1)*y(2)-8*y(3)/3];
y(1,[1;2;3])
size(y(1,[1;2;3]))
您好,感谢您回答我的问题。我只是尝试了你的回答,看起来它确实使我的功能成为一个向量。问题是当我尝试计算这个向量的行数时,它会发出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