Опубликован: 12.03.2015 | Уровень: для всех | Доступ: платный | ВУЗ: Компания ALT Linux
Лекция 6:

Векторная алгебра и аналитическая геометрия

Аннотация: Рассмотрим возможности Octave при решении задач векторной алгебры и аналитической геометрии. Благодаря мощным графическим средствам пакета эти задачи становятся более понятными и наглядными.

6.1 Векторная алгебра

В геометрии вектором называется всякий направленный отрезок. Учение о действиях над векторами называется векторной алгеброй.

Вектор, началом которого служит точка А, а концом точка В, обозначается \overrightarrow{AB} или \vec{a}. Если начало и конец вектора совпадают, то отрезок превращается в точку и теряет направление, такой отрезок называют нуль-вектором.

Если вектор задан точками A(x_1, y_1) и B(x_2, y_2), то его координаты: \overrightarrow{AB}=\{(x_2-x_1), (y_2-y_1)\}=\{X,Y\}. Длина вектора называется также его модулем, обозначается |\overrightarrow{AB}| или |\vec{a}| и вычисляется по формуле:

|\vec{a}|=\sqrt{(x_2-x_1)^2+(y_2-y_1)^2}=\sqrt{X^2+Y^2}

Формулы

M_x=\frac{x_1+x_2}{2},M_y=\frac{y_1+y_2}{2}

служат для вычисления координат середины отрезка \overrightarrow{AB}.

Разделить отрезок \overrightarrow{AB} в заданном отношении λ можно так: L_{x}=\frac{x_{1}+\lambda x_{2}}{1+\lambda},L_{y}=\frac{y_{1}+\lambda y_{2}}{1+\lambda }, здесь L_x и L_y — координаты точки L, делящей отрезок в отношении AL:LB=l_{1}:l_{2}=\lambda.

Напомним, что векторы в Octave задаются путём поэлементного ввода:

	
>>> a =[1 0 3] % Вектор-строка
a = 1 0 3
>>> b = [0; 1; 4] % Вектор-столбец
b =
0
1
4

Пример 6.1. Построить вектор |\vec{a}| = \{5, 7\}.

Решение примера показано на рис. 6.1 . Листинг 6.1 содержит команды Octave, с помощью которых был выполнен рисунок.

	
clear all; clf; cla;
set(gcf, ’Position’, [20, 20, 400, 400]);
set(gcf, ’numbertitle’, ’off’)
set(gcf, ’name’, ’Vector’)
set(gca, ’Position’, [.1, .1, .8, .8]);
set(gca, ’xlim’, [0, 10]); set(gca, ’ylim’, [0, 10]);
set(gca, ’xtick’, [0: 10]); set(gca, ’ytick’, [0: 10]);
grid on; xlabel(’x’); ylabel(’y’);
a =[5 7];
L1=line([0, a (1)], [0, a(2)]);
set(L1, ’LineWidth’, 3, ’Color’, ’k’);
L1_=line([a(1), a(1)], [a(2), a(2)]);
set(L1_, ’LineWidth’, 5, ’Color’, ’k’);
set(L1_, ’marker’, ’<’, ’markersize’, 16);
Листинг 6.1. Построение вектора (пример 6.1).

Пример 6.2. Построить векторы, заданные координатами начала и конца:

\begin{array}{ccc}
										\vec{a}=\{(2,3),(4,6)\}, &\vec{b}=\{(9,7),(6,5)\}, &\vec{c}=\{(1,8),(4,8)\},\\ 
										\vec{d}=\{(6,7),(6,9)\}, &\vec{k}=\{(8,4),(8,1)\}, &\vec{p}=\{(7,3),(5,3)\}.
										\end{array}

Решение примера показано в листинге 6.2 и на рис. 6.2. Обратите внимание, что для изображения вектора была создана специальная функция vector(A, B). Эта функция изображает направленный отрезок |\overrightarrow{AB}| в декартовой системе координат и возвращает координаты его середины. В данном случае координаты середины отрезка нужны для нанесения соответствующей надписи, обозначающей вектор на рисунке.

Вектор на плоскости

Рис. 6.1. Вектор на плоскости
	
clear all;
% Функция рисует направленный отрезок АВ, в качестве результата выдаёт
% координаты середины отрезка АВ.
function [M]= vector(A,B)
	x1=A(1); x2=B(1); y1=A(2); y2=B(2);
	alf =30*pi/180;% Угол в вершине стрелки в радианах
	L=15; % Деление отрезка в заданном отношении
	xm=(x1+L*x2)/(1+L); ym=(y1+L*y2)/(1+L);
	k1=(y2-y1)/( x2-x1); % Угол наклона прямой АВ
	if (k1==Inf ) | (k1==-inf) % Отрезок перпендикулярен оси Ох
			% Координаты основания треугольника, образующего стрелку
			x4=xm-0.2; y4=ym; x3=xm+0.2; y3=ym;
	elseif k1==0 % Отрезок перпендикулярен оси Оу
			x4=xm; y4=ym-0.2; x3=xm; y3=ym+0.2;
	else
			% Уравнение прямой АВ
			k1=(y2-y1)/(x2-x1); m1=y1-x1*(y2-y1)/(x2-x1);
			% Уравнение прямой перпендикулярной АВ
			k3=-1/k1; m3=1/k1*xm+ym;
% Уравнение прямой, проходящей через точку В под углом alf к прямой АВ
	k2=(-k1*tan(alf))/(tan(alf)*k1-1); m2=y2-k2*x2;
% Уравнение прямой, проходящей через точку В под углом -alf к прямой АВ
	k4=(-k1*tan(-alf))/(tan(-alf)*k1-1); m4=y2-k4*x2;
% Координаты основания треугольника, образующего стрелку
	x4=(m3-m2)/(k2-k3); y4=k2*x4+m2;
	x3=(m3-m4)/(k4-k3); y3=k3*x3+m3;
	end;
	% Изображение прямой АВ
	line([A(1),B(1)], [A(2), B(2)], ’LineWidth’, 3, ’Color’, ’k’);
	% Изображение стрелки в точке В
	patch([x2, x3, x4], [y2, y3, y4], ’k’);
	% Координаты середины отрезка АВ
	M(1) =(x1+x2)/2; M(2) =(y1+y2)/2;
end;
clf; cla;
set(gcf, ’Position’, [20, 20, 400, 400]);
set(gcf, ’numbertitle’, ’off’); set(gcf, ’name’, ’Vector’);
set(gca, ’Position’, [.1, .1, .8, .8]);
set(gca, ’xlim’, [0, 10]); set(gca, ’ylim’, [0, 10]);
set(gca, ’xtick’, [0: 10]); set(gca, ’ytick’, [0 : 10]);
grid on; xlabel(’x’); ylabel(’y’);
ma=vector([2, 3], [4, 6]); % Построение вектора a
T=text(ma(1)+0.3,ma(2)-0.3, ’a’); set (T, ’FontSize’, 20)
mb=vector([9, 7], [6, 5]); % Построение вектора b
T=text(mb(1)+0.3,mb(2)-0.3, ’b’); set(T, ’FontSize’, 20)
mc=vector([1, 8], [4, 8]); % Построение вектора c
T=text(mc(1) +0.3,mc(2)-0.3, ’c’); set(T, ’FontSize’, 20)
md=vector([6, 7], [6, 9]); % Построение вектора d
T=text(md(1)+0.3,md(2)-0.3, ’d’); set(T, ’FontSize’, 20)
mk=vector([8, 4], [8, 1]); % Построение вектора k
T=text(mk(1)+0.3,mk(2)-0.3, ’k’); set (T, ’FontSize’, 20)
mp=vector([7, 3], [5, 3]); % Построение вектора p
T=text(mp(1) +0.3,mp(2)-0.3, ’p’); set(T, ’FontSize’, 20)
Листинг 6.2. Построение векторов, функция vector (пример 6.2).
Геометрическое решение примера 6.2

Рис. 6.2. Геометрическое решение примера 6.2

Два ненулевых вектора \vec{a} и \vec{b} равны, если они равнонаправлены и имеют один и тот же модуль. Все нулевые векторы равны. Во всех остальных случаях векторы не равны. Два вектора имеющие равные модули и противоположные направления, называются противоположными . Векторы лежащие на параллельных прямых называются коллинеарными.

Пример 6.3. Сравнить векторы \overrightarrow{AB} и \overrightarrow{CD}, \overrightarrow{ON}, \overrightarrow{OM} и \overrightarrow{KL}, \overrightarrow{PR} и \overrightarrow{UV} заданные координатами начала и конца: A(1, 2), B(3, 5), C(3, 2), D(5, 5), O(7, 9), M(6, 6), N(8, 6), K(4, 9), L(3, 6), P(9, 2), R(6, 2), U(6, 3), V(9, 3).

Текст файла-сценария представлен в листинге 6.3. При решении примера была создана функция dlina(X, Y), которая вычисляет длину отрезка XY, заданного координатами точек X(x_1, x_2) и Y(y_1, y_2). Для изображения векторов использовалась функция vector(A, B), описанная в примере 6.2.

Решение примера показано в конце листинга 6.3 и на рис. 6.3 . По полученным числовым результатам и геометрической интерпретации примера можно сделать вывод, что векторы \overrightarrow{AB} и \overrightarrow{CD} равны. Векторы \overrightarrow{ON} и \overrightarrow{OM} не равны, хотя у них и одинаковые длины, но направления различны. Векторы \overrightarrow{ON} и \overrightarrow{KL} неравны по той же причине, а векторы \overrightarrow{OM} и \overrightarrow{KL} равны. Векторы \overrightarrow{PR} и \overrightarrow{UV} — противоположные, так как имеют одинаковый модуль и противоположные направления.

	
function d=dlina(X,Y) % Функция возвращает длину отрезка XY
	d=sqrt((Y(1)-X(1))^2+(Y(2)-X(2))^2);
end;
clf;
set(gcf, ’Position’, [20, 20, 400, 400]);
set(gcf, ’numbertitle’, ’off’)
set(gcf, ’name’, ’Vector’)
cla;
set(gca, ’Position’, [.1, .1, .8, .8]);
set(gca, ’xlim’, [0, 10]); set(gca, ’ylim’, [0, 10]);
set(gca, ’xtick’, [0 : 10]); set(gca, ’ytick’, [0 : 10]);
grid on; xlabel(’x’); ylabel(’y’);
% Исходные данные
A= [1, 2];B= [3, 5];C= [3, 2];D= [5, 5];O= [7, 9];M= [6, 6];N= [8, 6];
K= [4, 9]; L= [3, 6];P= [9, 2];R= [6, 2];U= [6, 3];V= [9, 3];
% Длины отрезков
dAB=dlina(A,B)
dCD=dlina(C,D)
dON=dlina(O,N)
dOM=dlina(O,M)
dKL=dlina(K,L)
dPR=dlina(P,R)
dUV=dlina(U,V)
% Построение вектора AB
vector(A,B);
A_=text(A(1)+0.3,A(2)-0.3, ’A’); set(A_, ’FontSize’, 20)
B_=text(B(1)+0.3,B(2)-0.3, ’B’); set(B_, ’FontSize’, 20)
% Построение вектора CD
vector(C,D);
C_=text(C(1)+0.3,C(2)-0.3, ’C’); set(C_, ’FontSize’, 20)
D_=text(D(1)+0.3,D(2)-0.3, ’D’); set(D_, ’FontSize’, 20)
% Построение вектора OM
vector(O,M);
O_=text(O(1)+0.3,O(2)-0.3, ’O’); set(O_, ’FontSize’, 20)
M_=text(M(1)+0.3,M(2)-0.3, ’M’); set(M_, ’FontSize’, 20)
% Построение вектора ON
vector(O,N);
O_=text(O(1)+0.3,O(2)-0.3, ’O’); set(O_, ’FontSize’, 20)
N_=text(N(1)+0.3,N(2)-0.3, ’N’); set(N_, ’FontSize’, 20)
% Построение вектора KL
vector(K,L);
K_=text(K(1)+0.3,K(2)-0.3, ’K’); set(K_, ’FontSize’, 20)
L_=text(L(1)+0.3,L(2)-0.3, ’L’); set(L_, ’FontSize’, 20)
% Построение вектора PR
vector(P,R);
P_=text(P(1)+0.3,P(2)-0.3, ’P’); set(P_, ’FontSize’, 20)
R_=text(R(1)+0.3,R(2)-0.3, ’R’); set(R_, ’FontSize’, 20)
% Построение вектора UV
vector(U,V);
U_=text(U(1)+0.3,U(2)-0.3, ’U’); set(U_, ’FontSize’, 20)
V_=text(V(1)+0.3,V(2)-0.3, ’V’); set(V_, ’FontSize’, 20)
% Решение примера 6.3
% Длины отрезков:
AB = 3.6056
CD = 3.6056
ON = 3.1623
OM = 3.1623
KL = 3.1623
PR = 3
UV = 3
Листинг 6.3. Сравнение векторов (пример 6.3).
Алексей Игнатьев
Алексей Игнатьев

Возможна ли разработка приложения на Octave с GUI?

Евгений Ветчанин
Евгений Ветчанин

Добрый день. Я самостоятельно изучил курс "Введение в Octave" и хочу получить сертификат. Что нужно сднлать для этого? Нужно ли записаться на персональное обучение с тьютором или достаточно перевести деньги?

Владимир Мельников
Владимир Мельников
Россия, г. Омск
анна тихонова
анна тихонова
Россия