И, если я правильно понимаю, в тестовых примерах не должно быть переменных-параметров (такой случай тоже можно представить). Скажем,
.
Уцепился за случай, когда компоненты вектора могут содержать переменную и сразу обнаружилась проблема:
>> syms n
>> A=[cos(n) sin(n)]
A =
[ cos(n), sin(n)]
>> z=sym(3)
z =
3
>> B=[sym(1) tan(z)]
B =
[ 1, tan(3)]
>> C=simplify(A(1)*B(2)-A(2)*B(1))
C =
-sin(n - 3)/cos(3)
Очевидно, что при n=3 получим C=0. Но как подсказать это Матлабу? То есть чтобы функция checkCollinear(A,B) выдавала в данном случае 1? Вот в чем вопрос!
P.S. Сейчас она выдает для данных векторов 0.
-- 18.07.2021, 00:05 --Кажись нащупал:
-- 18.07.2021, 00:37 --В интересующем меня случае переменная одна и имеет ограничение - она должна быть натуральной. С учетом этого доработал функцию проверки коллинеарности так:
function [res] = checkCollinear(A,B)
% проверка коллинеарности двух векторов размерности 2 заданных в символьном виде
% если res=1, то A и В коллинеарны, если res=0 - нет
eq=expand(A(1)*B(2)-A(2)*B(1));
c=simplify(eq, 'Steps', 10);
c=solve(c);
c=double(c);
if mod(c,1)==0 && c>=0
res=1;
else
res=0;
end
end
Пример работы:
>> syms n
A=[cos(n) sin(n)]
z=sym(3)
B=[sym(1) tan(z)]
C=simplify(A(1)*B(2)-A(2)*B(1))
checkCollinear(A,B)
A =
[ cos(n), sin(n)]
z =
3
B =
[ 1, tan(3)]
C =
-sin(n - 3)/cos(3)
ans =
1