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 явно изменил папки.
© 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