Spec-Zone.ru › Octave 6

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 (имя, …)

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

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

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/v6.4.0/Calling-a-Function-by-its-Name.html

Spec-Zone.ru

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