0

我想知道为什么当我运行如下代码时,变量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

4

2 回答 2

0

您的呼叫在 rhs 上ode45没有:y

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

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

于 2012-04-10T09:50:56.587 回答
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 的方式无论如何都会给你错误的答案。

于 2012-04-10T09:58:00.367 回答