【问题标题】:Saving to array for plotting - MATLAB/Octave保存到数组以进行绘图 - MATLAB/Octave
【发布时间】:2015-04-09 10:22:40
【问题描述】:

我遇到了一个小问题,我多年来一直在寻找,但不知道如何解决!我有一个嵌套的 for 循环,用于计算增加时间的 for 循环内增量距离上的值。代码是:

    h = 25;
    for t = 0:0.5:2
        t
        eta = a*cos(k*x-w*t)
        i = 1;
        for z = eta:-h               
             u = w * a * ((cosh(k * (h + z)))/sinh(k*h))*sin(w * t);
             du = (a * w * w) * ((cosh(k * (h + z)))/sinh(k * h)) * cos(w * t); 
             F(i) = (0.5 * rho * Cd * D * u * abs(u)) + rho * A * Cm * du
             i++
             plot(F,z)
        end
        %title('Forces')
        %plot(F,z), hold on
        %drawnow;
        %pause(1/20)

    end 

好的,有几个问题(我遇到了很多问题,但目前就是这样): 1)它甚至没有进入第二个 for 循环。我试图从在某个 t 处为 eta 计算的值增加 z,并在那个时候为每个 z 计算 F,然后返回到第一个 for 循环以增加 t。没看到问题出在哪里? 2)我想将 z 和 F 值保存到一个数组中,以便我可以为每个 t 绘制(稍后动画)。这里也有问题...

非常感谢任何建议,或者如果您能找到任何可以帮助我解决此问题的方法!

提前致谢

【问题讨论】:

  • 你能让它在 MATLAB 中运行吗? i++ 未在 MATLAB 语法中定义。除此之外,在您继续在操作中使用它之前,您永远不会定义a。这是你在哪个编辑器上写的? MATLAB 编辑器本身会告诉你所有这些......
  • 在第二个for循环中检查eta的值是否小于-25,为什么t会挂在那里?
  • 对不起,这确实有效,我删除了所有变量声明。我正在使用八度,所以 i++ 似乎确实在八度中工作
  • no eta 值保持在 -1 到 1 的范围内..

标签: arrays matlab octave nested-loops


【解决方案1】:

第一个问题是您没有定义所有变量。(“a”、“k”、“x”、“w”是未知的)。 其次,您必须将语法从 i++ 更改为 i = i + 1; 您还必须在第二个 for 循环中减少 z。 您必须进行这些更改,您的代码将运行。

为了将值保存在数组中,您应该使用以下语法:

YourArray = [YourArray, Value(i)]

在你的 for 循环中。 在循环之前初始化你的数组YourArray = [];。

【讨论】:

  • OP 在 Octave 中运行代码,其中 i++ 和 i-- 是完全有效的语法。
  • 当你说 Value(i) 时,应该只是 i 值吧?我意识到这听起来像是一个愚蠢的问题
  • 我的变量也被定义了,我只是把那部分遗漏了..这段代码确实运行了,给了我所有正确的值,但没有绘图......我会看看我能不能回到该版本和编辑
  • @carandrauq i++ 和 i-- 不是 Matlab 的有效语法,因此如果使用 Matlab 运行代码,就会出现错误。
  • @user3460758 如果您不提供所有边界条件,我们将无法调试您的代码。嵌套循环无法执行的最明显原因是 eta 可能大于 -h。如果您希望循环变量递减,至少在 MATLAB 中您需要明确提及负递增,例如 for eta:-1:-h。
猜你喜欢
  • 2017-03-31
  • 1970-01-01
  • 2017-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多