ode45函数处理时变量列线是否改变?

时间:2012-04-10 09:42:33

标签: 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 =

 0     0
 0     0
  

y =

10
 3
10
 3

然后函数ode45似乎只接收变量y一个列向量?

2 个答案:

答案 0 :(得分:0)

您对ode45的电话在rhs上没有y

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

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

答案 1 :(得分:0)

你的leadermove功能对我不起作用,所以我无法测试。我认为ode45的第三个参数应该是一个向量,所以可能将它改为:

[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的方式无论如何都给你错误的答案。