Spec-Zone.ru › Octave 8

9.1 Вызов функции по имени

Функция feval позволяет вызывать функцию из строки, содержащей её имя. Это полезно при написании функции, которая должна вызывать функции, заданные пользователем. Функция feval принимает имя вызываемой функции в качестве первого аргумента, а оставшиеся аргументы передаются функции.

Следующий пример — простая функция, использующая feval, которая находит корень функции от одного переменного, заданной пользователем, с помощью метода Ньютона.

function result = newtroot (fname, x)

# usage: newtroot (fname, x)
#
#   fname : a string naming a function f(x).
#   x     : initial guess

  delta = tol = sqrt (eps);
  maxit = 200;
  fx = feval (fname, x);
  for i = 1:maxit
    if (abs (fx) < tol)
      result = x;
      return;
    else
      fx_new = feval (fname, x + delta);
      deriv = (fx_new - fx) / delta;
      x = x - fx / deriv;
      fx = fx_new;
    endif
  endfor

  result = x;

endfunction

Обратите внимание, что это всего лишь пример вызова функций, заданных пользователем, и к нему не следует относиться слишком серьёзно. Кроме использования более надёжного алгоритма, любой серьёзный код проверит количество и тип всех аргументов, убедится, что предоставленная функция действительно является функцией и т. д. См. Предикаты для числовых объектов для списка предикатов для числовых объектов и Статус переменных для описания функции exist.

: feval (name, …) ¶

Вычисляет функцию с именем name.

Любые аргументы после первого передаются в качестве входных данных названной функции. Например,

feval ("acos", -1)
     ⇒ 3.1416

вызывает функцию acos с аргументом ‘-1’.

Функция feval также может использоваться с обработчиками функций любого типа (см. Обработчики функций). Раньше feval была единственным способом вызова функций, заданных пользователем, из строк, но теперь предпочтительны обработчики функций благодаря более чистому синтаксису. Например,

f = @exp;
feval (f, 1)
    ⇒ 2.7183
f (1)
    ⇒ 2.7183

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

Существует аналогичная функция run для вызова пользовательских скриптовых файлов, которые не обязательно находятся на пользовательском пути.

: run script ¶
: run ("script") ¶

Запускает script в текущем рабочем пространстве.

Скрипты, находящиеся в каталогах, указанных в пути загрузки Octave, и заканчивающиеся расширением .m, можно запустить, просто набрав их имя. Для скриптов, не находящихся в пути загрузки, используйте run.

Имя файла script может быть полным, относительным или без расширения. Если расширение не указано, Octave сначала ищет скрипт с расширением .m, а затем использует имя скрипта без расширения.

Примечание к реализации: Если script содержит компонент пути, то run сначала изменяет рабочий каталог на каталог, где находится script. Затем выполняется скрипт. Наконец, run возвращается в исходный рабочий каталог только если script явно не изменил каталог.

См. также: path, addpath, source.

© 1996–2022 The Octave Project Developers
Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.
Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.
Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions.
https://docs.octave.org/v7.2.0/Calling-a-Function-by-its-Name.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API