Spec-Zone.ru › Octave 9

Далее: Оценивание в другом контексте, Вверх: Оценивание [Содержание][Индекс]

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.

: retval = 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–2023 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/v9.2.0/Calling-a-Function-by-its-Name.html

Spec-Zone.ru

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