2014 dxdy logo

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

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




Начать новую тему Ответить на тему На страницу Пред.  1, 2
 
 Re: Матлаб: проверка коллинеарности векторов зад-х в символ.виде
Сообщение17.07.2021, 22:57 


26/09/17
341
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 


26/09/17
341
В итоге оказалось, что проверку коллинеарности векторов мне лучше делать в скрипте, а функция должна вычислять такое значение переменной, при котором векторы 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

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group