Категории
Хирургия
Function display(p) просмотров - 340
% @polynom/display.m
disp(' ');
disp([inputname(1),' = '])
disp(' ');
disp([' ' char(p)])
disp(' ');
Одним из важнейших способов управления поведением объекта служит переопределение для него базовых математических операторов. Делается это также, как и в предыдущем случае, при определении конструкторов и конверторов. А именно, нужно завести в папке, содержащей методы класса M-файл с именем, соответствующем имени переопределяемого оператора и в этом файле определить функцию с этим же именем, к примеру:
function r = plus(p,q)
% @POLYNOM/PLUS.M
p = polynom(p);
q = polynom(q);
k = length(q.c) - length(p.c);
r = polynom([zeros(1,k) p.c] + [zeros(1,-k) q.c]);
Такая функция, определенная в файле @polynom/plus.m позволит складывать полиномы, как обычные объекты MATLAB - вещественные матрицы, вектора или числа. При этом, принудительное преобразование формальных аргументов к типу полинома в первых строках этой функции гарантирует, что будут правильно вычисляться смешанные выражения:
" p = polynom([1 2 3]);
" q = polynom([3 2 1]);
" pq = p + q;
" p1 = p + 1;
" q1 = 1 + q;
Вызовы функции zeros() в методе сложения полиномов дополняют нулями коэффициенты более короткого полинома из двух. В таблице приводится полный список имен методов для переопределения всех операторов MATLAB:
Оператор | Метод | Описание |
a + b | plus(a,b) | Сложение |
a - b | minus(a,b) | Вычитание |
-a | uminus(a) | Унарный минус |
+a | uplus(a) | Унарный плюс |
a.*b | times(a,b) | Поэлементное умножение |
a*b | mtimes(a,b) | Матричное умножение |
a./b | rdivide(a,b) | Правое поэлементное деление |
a.\b | ldivide(a,b) | Левое поэлементное деление |
a/b | mrdivide(a,b) | Правое матричное деление |
a\b | mldivide(a,b) | Левое матричное деление |
a.^b | power(a,b) | Поэлементное возведение в степень |
a^b | mpower(a,b) | Матричное возведение в степень |
a < b | lt(a,b) | Меньше |
a > b | gt(a,b) | Больше |
a <= b | le(a,b) | Меньше или равно |
a >= b | ge(a,b) | Больше или равно |
a ~= b | ne(a,b) | Неравно |
a == b | eq(a,b) | Равно |
a & b | and(a,b) | Логическое И |
a | b | or(a,b) | Логическое ИЛИ |
~a | not(a,b) | Логическое НЕ |
a:d:b или a:b | colon(a,d,b) colon(a,b) | Оператор "двоеточие" - генерация |
a.' | transpose(a) | Транспонирование |
a' | ctranspose(a) | Комплексно-сопряженное транспонирование |
[a b] | horzcat(a,b,...) | Горизонтальная конкатенация |
[a; b] | vertcat(a,b,...) | Вертикальная конкатенация |
a(s1,s2,...sn) | subsref(a,s) | Ссылка по индексу |
a(s1,...,sn) = b | subsasgn(a,s,b) | Присваивание по индексу |
b(a) | subsindex(a,b) | Индексирование |
Вывод в командной строке | display(a) | Распечатка значения |