exponenta event banner

Сравнить дескрипторы функций

Сравнить дескрипторы, созданные из именованной функции

MATLAB ® считает, что дескрипторы функций, созданные из той же самой именованной функции, равны. Функция isequal возвращает значение true при сравнении этих типов ручек.

fun1 = @sin;
fun2 = @sin;
isequal(fun1,fun2)
ans =

  logical

   1

Если сохранить эти дескрипторы в MAT-файл, а затем загрузить их обратно в рабочую область, они остаются равными.

Сравнить дескрипторы с анонимными функциями

В отличие от дескрипторов именованных функций, дескрипторы функций, представляющие одну и ту же анонимную функцию, не равны. Они считаются неравными, поскольку MATLAB не может гарантировать, что замороженные значения переменных, не являющихся аргументами, одинаковы. Например, в этом случае A является переменной без аргумента.

A = 5;
h1 = @(x)A * x.^2;
h2 = @(x)A * x.^2;
isequal(h1,h2)
ans =

  logical

   0

При создании копии дескриптора анонимной функции копия и оригинал равны.

h1 = @(x)A * x.^2;
h2 = h1;
isequal(h1,h2)
ans =

  logical

   1

Сравнить дескрипторы с вложенными функциями

MATLAB считает, что дескрипторы функций для той же вложенной функции равны только в том случае, если код создает эти дескрипторы для того же вызова функции, содержащей вложенную функцию. Эта функция создает два дескриптора для одной вложенной функции.

function [h1,h2] = test_eq(a,b,c)
h1 = @findZ;
h2 = @findZ;

   function z = findZ
   z = a.^3 + b.^2 + c';
   end
end

Дескрипторы функций, созданные из той же вложенной функции и при том же вызове родительской функции, считаются равными.

[h1,h2] = test_eq(4,19,-7);
isequal(h1,h2)
ans =

  logical

   1

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

[q1,q2] = test_eq(4,19,-7);
isequal(h1,q1)
ans =

  logical

   0

См. также

Связанные темы