Можете ли вы переопределить арифметический оператор в MATLAB? ... Да
Должен ли переопределить арифметический оператор в MATLAB? ... Эх, вероятно нет.
Почему? Поскольку любая другая функция в MATLAB ожидает, что арифметический оператор будет вести себя так, как определено встроенной реализацией.
Я ответил на несколько других связанных вопросов, связанных с перегрузкой арифметических операторов и отслеживанием встроенного поведения, которые я определенно рекомендую сначала прочитать, чтобы понять детали, трудности и подводные камни, связанные с таким подходом:
И теперь, когда я закончил со своим заявлением об ограничении ответственности, я передам вам пистолет, из которого можно выстрелить себе в ногу ...;)
Арифметические операторы в MATLAB имеют функциональные эквиваленты, которые вызываются за кулисами при их вызове, которые перечислены здесь . Оператор массива .^
при вызове вызывает встроенную функцию power
.
Теперь будет отдельная power
функция, определенная для каждого типа данных , который ее использует. Эта функция будет помещена в каталог @type
, который можно увидеть с помощью функции which
для просмотра различных существующих функций power
:
>> which power -all
built-in (C:\Program Files\MATLAB\R2010b\toolbox\matlab\ops\@single\power) % single method
built-in (C:\Program Files\MATLAB\R2010b\toolbox\matlab\ops\@double\power) % double method
built-in (C:\Program Files\MATLAB\R2010b\toolbox\matlab\ops\@char\power) % char method
built-in (C:\Program Files\MATLAB\R2010b\toolbox\matlab\ops\@int64\power) % int64 method
built-in (C:\Program Files\MATLAB\R2010b\toolbox\matlab\ops\@int32\power) % int32 method
built-in (C:\Program Files\MATLAB\R2010b\toolbox\matlab\ops\@int16\power) % int16 method
built-in (C:\Program Files\MATLAB\R2010b\toolbox\matlab\ops\@int8\power) % int8 method
built-in (C:\Program Files\MATLAB\R2010b\toolbox\matlab\ops\@uint64\power) % uint64 method
built-in (C:\Program Files\MATLAB\R2010b\toolbox\matlab\ops\@uint32\power) % uint32 method
built-in (C:\Program Files\MATLAB\R2010b\toolbox\matlab\ops\@uint16\power) % uint16 method
built-in (C:\Program Files\MATLAB\R2010b\toolbox\matlab\ops\@uint8\power) % uint8 method
Если ваши переменные x
и y
будут иметь тип double
(как они есть по умолчанию в MATLAB), то вам придется затенять встроенный @double\power
функция. Вы можете сделать это, создав каталог (назовем его temp
), создав подкаталог в этом каталоге с именем @double
, а затем поместив следующую пользовательскую функцию power
в этот подкаталог:
function result = power(x, y)
result = sign(x).*abs(builtin('power', x, y));
end
Теперь, в соответствии с порядком приоритета функции , MATLAB следует, если вы добавите каталог temp
в путь MATLAB , или если вы просто измените текущую рабочую информацию директории от до temp
, то при использовании оператора .^
для двойных переменных вместо встроенной будет вызываться указанная выше пользовательская функция power
.