1. По поводу текста функции. Функция из начального сообщения возвращает double array, а по смыслу должна — logical. Можно подправить на
function [res] = checkCollinear(A,B)
% если res==1, то коллинеарны, res==0 - нет
c =simplify(A(1)*B(2)-A(2)*B(1));
if c ==0
res=true;
else
res=false;
end
end
Смысла в данном случае в таком подходе нет. Удобней возвращать результат сравнения (и добавит проверку с генерацией ошибки)
function [res] = checkCollinear(A,B)
% если res==1, то коллинеарны, res==0 - нет
res = simplify(A(1)*B(2)-A(2)*B(1)) == 0;
if ~islogical(res)
error('res checkCollinear not logical')
end
end
Если проверка на то, что результат является logical не делается, то можно просто задать анонимной
>> checkCollinear = @(A,B) simplify(A(1)*B(2)-A(2)*B(1)) == 0;Если есть уверенность в том, что результат сравнения будет логическим, и он
действительно должен быть double array, то можно просто преобразовать.
>> checkCollinear = @(A,B) double(simplify(A(1)*B(2)-A(2)*B(1)) == 0);2. По поводу примеров. В простейших случаях можно столкнуться с тем, что главное значение не соответствует значению, предполагаемому пользователем. Вот тривиальный пример (Matlab 2013b)
>> A = sym([1, 1]); B = sym([(-1)^(1/3), -1]);
>> CC = checkCollinear(A,B)
CC = - (3^(1/2)*i)/2 - 3/2 == 0
(Конечно, в практически интересных случаях это будет «замаскировано».)
Что-то ещё встречалось. Если вспомню, то добавлю.