Задача 5. Построить кривую, приведя её уравнение к каноническому виду ортогональным преобразованием.

> По условию задачи:

> restart:with(plots):with(plottools):with(linalg):with(LinearAlgebra):

Warning, the name changecoords has been redefined

Warning, the name arrow has been redefined

Warning, the protected names norm and trace have been redefined and unprotected

Warning, the assigned name GramSchmidt now has a global binding

> f(x,y):=8*x^2+6*x*y=9;

f(x,y) := 8*x^2+6*x*y = 9

Cоcтавим квадратичную форму и оценим её определитель:

> A := convert(hessian(op(1,f(x,y)/2),[x,y]),Matrix);
'det(A)'=det(A);
if (det(A)>0) then print (`Данная кривая имеет эллептический вид.`);
elif (det(A)<0) then print (`Данная кривая имеет гиперболический вид.`);
else print (`Данная кривая имеет параболичсекий вид.`);
end if;

A := _rtable[2442192]

det(A) = -9

`Данная кривая имеет гиперболический вид.`

Найдём собственные числа, решая характерестическое уравнение:

> (l,OwnMatrix):=Eigenvectors(A);

l, OwnMatrix := _rtable[2835200], _rtable[17778828]...

> 'det'('A'-lambda*E)=0;
charmat(-A,-lambda)=0;
sort(charpoly(-A,-lambda))=0;
'lambda'=convert(l,vector);

det(A-lambda*E) = 0

matrix([[-lambda+8, 3], [3, -lambda]]) = 0

lambda^2-8*lambda-9 = 0

lambda = vector([-1, 9])

Найдём собственные вектора, решая характерестическое уравнение:

> for i to vectdim((convert(l,matrix))) do
lambda[i]=l[i];
charmat(-A,-l[i]);
print(`Собственный и нормализованый вектор:`);
'a'[i]=convert(col(OwnMatrix,i),matrix),
'e'[i]=convert(normalize(col(OwnMatrix,i)),matrix);od;

lambda[1] = -1

matrix([[9, 3], [3, 1]])

`Собственный и нормализованый вектор:`

a[1] = matrix([[1], [-3]]), e[1] = matrix([[1/10*sq...

lambda[2] = 9

matrix([[-1, 3], [3, -9]])

`Собственный и нормализованый вектор:`

a[2] = matrix([[3], [1]]), e[2] = matrix([[3/10*sqr...

Выразим координаты старого базиса через коордиинаты нового:

> normM:=transpose(matrix(2,2,[normalize(col(OwnMatrix,1)),normalize(col(OwnMatrix,2))])):
xy:=matrix(2,1,[`x`,`y`]):x1y1:=matrix(2,1,[`x'`,`y'`]):
evalm(xy)=evalm(normM)*evalm(x1y1);
evalm(xy)=multiply(normM,x1y1);
x=(multiply(normM,x1y1))[1,1];y=(multiply(normM,x1y1))[2,1];

matrix([[x], [y]]) = matrix([[1/10*sqrt(10), 3/10*s...

matrix([[x], [y]]) = matrix([[1/10*sqrt(10)*`x'`+3/...

x = 1/10*sqrt(10)*`x'`+3/10*sqrt(10)*`y'`

y = -3/10*sqrt(10)*`x'`+1/10*sqrt(10)*`y'`

Подставим их в исходное уравниение и получим каноническое уравнение кривой в координатах нового базиса:

> subs(x=(multiply(normM,x1y1))[1,1],y=(multiply(normM,x1y1))[2,1],f(x,y));
expand(%);
%/(op(2,%));
f(`x'`,`y'`):=%:

8*(1/10*sqrt(10)*`x'`+3/10*sqrt(10)*`y'`)^2+6*(1/10...

-`x'`^2+9*`y'`^2 = 9

-1/9*`x'`^2+`y'`^2 = 1

Выразим координаты в новом базисе через координаты в старом:

> solve({x=(multiply(normM,x1y1))[1,1],y=(multiply(normM,x1y1))[2,1]},{`x'`,`y'`});

{`x'` = 1/10*(x-3*y)*sqrt(10), `y'` = 1/10*(3*x+y)*...

Построим график данной кривой в системе координат XOY:

> coordp := [[-1,3],[1,3],[1,-3],[-1,-3],[-1,3]]:
rect1:=curve(coordp,linestyle=3):
c1:=col(OwnMatrix,1):
c2:=col(OwnMatrix,2):
X1Y1:=implicitplot({c1[1]*y=c1[2]*x,
c2[1]*y=c2[2]*x},
x=-6..6, y=-6..6,scaling=constrained,color=black,linestyle=DASH):
XY:=implicitplot({f(x,y)},
x=-6..6,y=-6..6,thickness=3,numpoints=600,labels=["",""]):
t1:=textplot([[c1[1]*2+.2,c1[2]*2, `x'`],
[-c2[1]*2, -c2[2]*2+.2,`y'`]],align={ABOVE,RIGHT},color=BLUE):
t2:=textplot([[6,.3,`x`],[-.7,6,`y`]],align={ABOVE,RIGHT},color=BLUE):
alpha:=arctan(1/3):rect2:=rotate(rect1,alpha):
plots[display]([XY,X1Y1,t1,t2,rect2],color=black,title="рис. 1");

[Maple Plot]