2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу Пред.  1, 2
 
 Re: Матлаб: проверка коллинеарности векторов зад-х в символ.виде
Сообщение17.07.2021, 22:57 
svv в сообщении #1526401 писал(а):
И, если я правильно понимаю, в тестовых примерах не должно быть переменных-параметров (такой случай тоже можно представить). Скажем, $A=(\cos \varphi, \sin\varphi), B=(1, \tg\varphi)$.
Уцепился за случай, когда компоненты вектора могут содержать переменную и сразу обнаружилась проблема:
код: [ скачать ] [ спрятать ]
Используется синтаксис Matlab M
>> 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 --

Кажись нащупал:
Используется синтаксис Matlab M
>> solve(C)
 
ans =
 
3


-- 18.07.2021, 00:37 --

В интересующем меня случае переменная одна и имеет ограничение - она должна быть натуральной. С учетом этого доработал функцию проверки коллинеарности так:
Используется синтаксис Matlab M
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
Пример работы:
код: [ скачать ] [ спрятать ]
Используется синтаксис Matlab M
>> 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

 
 
 
 Re: Матлаб: проверка коллинеарности векторов зад-х в символ.виде
Сообщение18.07.2021, 01:32 
В итоге оказалось, что проверку коллинеарности векторов мне лучше делать в скрипте, а функция должна вычислять такое значение переменной, при котором векторы A и В будут коллинеарны. Вот она:
Используется синтаксис Matlab M
function [res] = crossprodSolve(A,B)
% A и В - вектора размерности 2, которые заданы в символьном виде и содержат ровно одну переменную
% res показывает при каком значении переменной вектора A и В будут коллинеарны
res=solve(A(1)*B(2)-A(2)*B(1),'PrincipalValue',true);
end

Пример работы:
код: [ скачать ] [ спрятать ]
Используется синтаксис Matlab M
>> A
 
A =
 
[ cos(n), sin(n)]
 
>> B
 
B =
 
[ 1, tan(3)]
 
>> crossprodSolve(A,B)
 
ans =
 
3
Функция выбирает одно значение переменной, по какому принципу не знаю - подскажите, плиз.
Всем огромное спасибо. Отдельно благодарю svv за удачное замечание, которое позволило найти эффективное решения задачи.

 
 
 [ Сообщений: 17 ]  На страницу Пред.  1, 2


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group