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возвращается в исходную рабочую директорию, если скрипт не изменил директории явно.
© 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