Степенной метод , нахождение второго по величине собственного значения

Добрый день(вечер)всем . Есть у меня код "степенной метод" по поиску максимального по модулю собственного значения и собственых векторов матрицы . Хочу доработать его до поиска второго по величине а также собственных векторов . нужна помощь в этом

#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;
}

Ответы (0 шт):