【问题标题】:Variable appear to change size on every Loop [duplicate]变量似乎在每个循环上都会改变大小[重复]
【发布时间】:2019-06-27 17:19:20
【问题描述】:

我的代码给了我一条错误消息,指出 Y 似乎在每个循环中都会改变大小。

yo = [0.5;0.5;1];
% computing the trajectory
dt = 0.01;
tspan = (dt:dt:100); % number of time steps
Y(:,1)= yo;
yinput = yo;
for i = 1: tspan(end)/dt
    time = i*dt;
    youtput = rk4angelstepb(@rosslerb,dt,yinput,a,b,c);
    *Y = [Y,youtput]*;
    yinput = youtput;   
end

我的代码运行了,但我有两个问题:首先,盯着的行给出了一个警告,说 Y 似乎在每个循环中都发生了变化。其次,我尝试创建一个大 Y,其中第一个是初始条件。但我发现 Y 不等于我的初始条件 yo。 我做错了什么。

【问题讨论】:

  • 您发布了两个 for 循环。哪一个是正确的? for i = 1: tspan(end)/dt 没有意义。应该是for i = 1:length(tspan)/dtrk4angelstepb 的输出大小是多少?它是一个标量吗? “错误消息”不是错误,只是优化警告。
  • 在一个循环中显示Y(i) = [Y;youtput];,这没有意义。这个循环也缺少end。这是复制粘贴错误吗?请edit您的问题更正代码!

标签: matlab


【解决方案1】:

如果您提前完全分配内存,Matlab 运行效率会更高。像Y = [Y;youtput]; 这样的语句会递增地扩展 Y,这样效率较低。看起来您正在寻求解决方案。这是先分配空间,然后在循环内一次设置一个元素的东西。

Y = zeros(tspan(end)/dt,1);
for i = 1: tspan(end)/dt
    time = i*dt;
    youtput = rk4angelstepb(@rosslerb,dt,yinput,a,b,c);
    Y(i) = youtput;
    yinput = youtput;
end

【讨论】:

  • 谢谢。我试过了。但得到了不同的错误代码:无法执行分配,因为左侧和右侧的元素数量不同。模拟 ROSSLERb 中的错误(第 16 行)Y(i) = youtput;
  • @Angela:如果您想要一个比这个更好的答案,您需要编辑您的问题以包含minimal reproducible example。我们不知道rk4angelstepb 是什么,也不知道它返回什么。我们不知道您的代码的目的。请阅读How to Ask 和其中的链接。
猜你喜欢
  • 2014-01-28
  • 1970-01-01
  • 2021-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多