Степенной метод , нахождение второго по величине собственного значения
Добрый день(вечер)всем . Есть у меня код "степенной метод" по поиску максимального по модулю собственного значения и собственых векторов матрицы . Хочу доработать его до поиска второго по величине а также собственных векторов . нужна помощь в этом
#include <cmath>
#include <iostream>
void Input(int n, double A[][100])
{
int i,j;
for (i=0;i<n;i++)
for (j=0;j<n;j++){
std::cout << "Enter A[" << i << "][" << j << "]: ";
std::cin >> A[i][j];
}
}
void Matr(double A[][100],int n)
{
float w0[100],w[100],summ=0,w0norm[100],e,d,d0;
int i,j,k;
w0[0]=1.0;
for (i=1;i<n;i++)
w0[i]=0.0;
do
{
for (i=0;i<n;i++)
summ=summ+w0[i]*w0[i];
d0=sqrt(summ);
for (i=0;i<n;i++)
w0norm[i]=w0[i]/d0;
for (i=0;i<n;i++)
{
w[i]=0;
for (j=0;j<n;j++)
w[i]=w[i]+A[i][j]*w0norm[j];
}
summ=0;
for (i=0;i<n;i++)
summ=summ+w[i]*w[i];
d=sqrt(summ);
e=fabs(d-d0);
for (i=0;i<n;i++)
w0[i]=w[i];
summ=0;
} while(e>0.001);
std::cout << "\nMatrix:\n";
for (i=0;i<n;i++){
for (j=0;j<n;j++)
std::cout << A[i][j] << " ";
std::cout << " = " << w0norm[i] << std::endl;
}
std::cout << "\nL = " << d << std::endl;
}
int main()
{
int n;
double A[100][100];
std::cout << "Enter N = ";
std::cin >> n;
Input(n,A);
Matr(A,n);
std::cin.get();
std::cin.get();
return 0;
}