GNU Octave:即使将“ shape”定义为函数参数,也未定义

时间:2018-08-03 08:08:15

标签: undefined octave function-definition

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

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);

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

1 个答案:

答案 0 :(得分:1)

这可能与您在文件中定义函数的方式有关。

如果这是脚本文件,请在定义第一个功能之前从顶部的1;开始。这样,Octave会将其识别为脚本文件而不是功能文件。

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