Matlab ode45函数处理时变量列行发生更改?

Matlab ode45函数处理时变量列行发生更改?,matlab,math,Matlab,Math,我想知道为什么当我运行下面的代码时,变量y会从2*2变为4*1 function testforleader() %tspan=[0 10]; %y0=[[10 10];[3 3]]; y = zeros(2) [t,y] = ode45('leadermove',[0 10],[10 10;3 3]); function ydotr=leadermove(t,y) y ydotr = [y(2,:);[sin(t) cos(t)]];

我想知道为什么当我运行下面的代码时,变量
y
会从2*2变为4*1

function testforleader()   
    %tspan=[0 10];
    %y0=[[10 10];[3 3]];
    y = zeros(2)
    [t,y] = ode45('leadermove',[0 10],[10 10;3 3]);

function ydotr=leadermove(t,y)
    y
    ydotr = [y(2,:);[sin(t) cos(t)]];
命令窗口中的消息将显示如下:

y=

y=


然后函数ode45似乎只接收变量
y

one列向量。您对
ode45
的调用在rhs上没有
y

[t,y]=ode45('leadermove',[0 10],[10 10;3 3]);

但是在lhs上。如果它在调用之前存在,它将被调用覆盖。也许您应该将lhs上的变量重命名为类似于
yout

您的leadermove函数对我不起作用,因此我无法测试它。我认为的第三个参数应该是一个向量,所以可以将其改为:

[t,y]=ode45('leadermove',[0 10],[10 10 3 3]);
我会修好的。而且,正如马克所说

y = zeros(2);
不执行任何操作,因为ode45将在返回输出时覆盖它。您可以通过以下方法解决此问题:

y = zeros(2);
[t,y(:)]=ode45('leadermove',[0 10],[10 10 3 3]);

但我不知道这是否可行,我怀疑你现在打电话给ode45的方式给了你错误的答案。

好吧,我不应该发布代码y=0(2);它没有影响下面的代码处理。实际上,y的初始值是[10;3]。但是如上所示,在错误消息显示之前,它将变成一列向量[10;3;10;3]。
y = zeros(2);
y = zeros(2);
[t,y(:)]=ode45('leadermove',[0 10],[10 10 3 3]);