Добрый день!!! Уважаемые знатоки форума
Помогите разобраться с задачей в Maple с методом вращения Якоби для собственных значениях
Я не очень понимаю это метод, как он работает, но нашел в инете прогу, там написана процедура, объясните пожалуйста как он работает
Код:
restart;
with(LinearAlgebra):
n:=10;
j:=1.5+0.1*n;
k:=n;
l:=n;
Jacobi:=proc(A::Matrix)
local n, a, i, j, p, c, s, G, r;
n:=RowDimension(A);
a:=[[0,0],0];
for i from 1 to n do
for j from i+1 to n do
if abs(A[i,j])>=abs(a[2]) then a:=[[i,j], A[i,j]] fi;
od; od;
r:=A[a[1,1],a[1,1]]-A[a[1,2],a[1,2]];
p:=`if`(r<>0,2*a[2]/r, infinity);
c:=evalf(cos(arctan(p)/2));
s:=evalf(sin(arctan(p)/2));
G:=Matrix(n,{op(subsop(a[1,1]=((a[1,1],a[1,1])=c), a[1,2]=((a[1,2],a[1,2])=c),[seq((i,i)=1, i=1..n)])), (a[1,1],a[1,2])=-s, (a[1,2],a[1,1])=s}); print(G); print(a);
Transpose(G).A.G;
end proc:
A:=Matrix([[j*10,0.5*j,0,0.2*l,0],[0.5*j,j,0.3*j,0,0.1*l],[0,0.3*j,10,-0.3*j,0.5*l],[0.2*k,0,-0.3*j,j,-0.1*j],[0,0.1*k,0.5*k,-0.1*k,j*10]]);
(Jacobi@@20)(A);
Eigenvalues(A);
а именно: что выводит a:=[[0,0],0] и r:=A[a[1,1],a[1,1]]-A[a[1,2],a[1,2]]?
if abs(A[i,j])>=abs(a[2]) then a:=[[i,j], A[i,j]] fi; и почему именно a[2]?
я предполагаю, что 1) a:=[[0,0],0] первые две координаты [0,0] выводят номер строки и номер столбца максимального по модулю элемента А, а вот третья координата: мое предположение: угол поворота(если это не так, исправьте меня)
2) r это выражение, стоящее в знаменателе, когда ищем нужный угол для поворота. Например, если оказалось, что a=[[2,3],7] , то r=A[2,2]-A[3,3] , а A[2,3]=7
на третий вопрос, если я правильно понимаю: он сравнивает второй элемент