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