【问题标题】:GNU Octave: 'shape' is undefined even when it's defined as a function parameterGNU Octave:“形状”未定义,即使它被定义为函数参数
【发布时间】:2018-08-03 08:08:15
【问题描述】:

我写了一个简单的阻力模拟程序,只是结合了阻力公式和一些系数预设。我似乎遇到了未定义变量之一的问题。我发现了另一个与我有同样问题的问题,但没有一个答案对我有用。这是我的代码:

function drag = drag_calc(area_var, shape, density, velocity)
  shape_area = 0;
  drag_C = 0;

  fprintf("%s\n", shape);

  if (strcmp(shape, "sphere"))
      shape_area = 4 * pi * area_var^2;
      drag_C = 0.47;
  elseif (strcmp(shape, "sphere"))
      shape_area = area_var(1) * area_var(2);
      drag_C = 1.05;
  else
      shape_area = 1;
      drag_C = 1;
  endif

  drag = calc_drag(drag_C, shape_area, density, velocity);
endfunction

function drag_Force = calc_drag(drag_C, shape_area, density, velocity)

  drag_Force = (1/2) * drag_C * shape_area * density * velocity;
endfunction

velocity = 0:0.5:100;

drag = drag_calc(2, "sphere", 1.8, velocity);

plot(velocity, drag);

我知道要从另一个脚本调用函数,我需要说明我正在引用的文件的名称,尽管它仍然说同一个变量是未定义的。从命令行调用函数似乎也不起作用

【问题讨论】:

    标签: undefined octave function-definition


    【解决方案1】:

    这可能是您如何在文件中定义函数的问题。

    如果这是一个脚本文件,在定义你的第一个函数之前,以1; 开头。这样,Octave 会将其识别为脚本文件而不是函数文件。

    如果第一行代码是函数定义,则该文件将被视为函数文件,在命令行中使用其名称将执行第一个函数,而不是最后的脚本。

    【讨论】:

    • 我确实部分弄清楚了,如果我没有将文件中的第一行代码作为函数,它实际上会起作用,但是函数和函数之间到底有什么区别脚本文件?如果我将它们放在单独的文件中并尝试从另一个文件运行它们,我的函数似乎也不起作用,同样的错误会发生
    • 实际上我想我现在意识到我在开始时“调用”了我想在另一个脚本中使用的函数文件,导致函数在文件开头也被定义在这种情况下,所以我认为这肯定会有所帮助,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-21
    相关资源
    最近更新 更多