Spec-Zone.ru › Octave 5

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 скрипт
run ("скрипт")

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

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

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

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

См. также: 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/v5.2.0/Calling-a-Function-by-its-Name.html

Spec-Zone.ru

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