Я работаю над проблемами MATLAB из моего учебника, и одна из проблем просит меня использовать команду eig
в MATLAB, вычислить матрицы V
и D
так, чтобы A = V * D * inv(V)
. Зная, что первый столбец V
соответствует первому собственному значению D(1,1)
и т. Д., Мне нужно изменить порядок диагональных элементов в D
, чтобы действительная часть увеличивалась по диагонали, и изменить порядок столбцов V
соответственно, так что A = V * D * inv(V)
все еще сохраняется. Вот что я написал до сих пор:
r = RandStream('mt19937ar','Seed',1234);
A = r.randn(10,10)+1j*r.randn(10,10);
[V,D] = eig(A);
for tt = 1:9
if (real(D(tt,tt)) > real(D(tt+1,tt+1)))
temp = D(tt,tt);
D(tt,tt) = D(tt+1,tt+1);
D(tt+1,tt+1) = temp;
tempV = V(1,tt);
V(1,tt) = V(1,tt+1);
V(1,tt+1) = tempV;
if (A == V*D*inv(V))
break
end
end
end
Когда я проверял это, диагональные элементы D
не изменились по сравнению с первоначальным порядком, я знаю, что это может быть связано с заданными мною условиями, ноЯ не уверен, что именно заставляет его ничего не делать. Я также думаю, что могут возникнуть проблемы с перестановкой диагональных элементов и соответствующих собственных векторов. Любые отзывы или предложения приветствуются, спасибо заранее.