我想知道为什么当我运行下面的代码时,变量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
的一个列向量?
答案 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的方式无论如何都给你错误的答案。