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