GNU Octave: "форма" не определена, даже если она определена как параметр функции

Я написал простую программу имитации перетаскивания, включающую формулу перетаскивания и несколько предустановок для коэффициентов. Кажется, у меня проблемы с одной из переменных, которые не определены. Я нашел еще один вопрос с той же проблемой, что и я, но ни один из ответов не работает для меня. Вот мой код:

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 ответ

Это, вероятно, проблема с тем, как вы определяете функции в файле.

Если это файл скрипта, запустите его с 1; наверху, прежде чем определить вашу первую функцию. Таким образом, Octave распознает его как файл сценария, а не как файл функции.

Если первая строка кода является определением функции, этот файл будет рассматриваться как файл функции, и использование его имени в командной строке будет выполнять эту первую функцию, а не ваш сценарий в конце.

Другие вопросы по тегам