예제 #1
0
파일: main.cpp 프로젝트: dancingtreef/myrep
double Strip::getCond()
{
    return N * A.GET_M()[0][0] / L;

}
예제 #2
0
파일: main.cpp 프로젝트: dancingtreef/myrep
void Strip::AddS()
{
    /*int R = Destrib(pc);
    MATRIX Y(A.GET_n());
    Y = A;
    int i,j;
    if (a != N-1)
    {
        if (R){
        if(A.GET_M()[a][a] !=0)
                for(i = 0;i < N;i++)
                    for(j = 0;j < N;j++){

                                A.GET_M()[i][j] -= (Y.GET_M()[i][a] * Y.GET_M()[a][j]) / (1 + Y.GET_M()[a][a]);
                }
        }
        else
            if(Y.GET_M()[a][a] != 0)
                for(i = 0;i < N;i++)
                    for(j = 0;j < N;j++){
                                A.GET_M()[i][j] -= (Y.GET_M()[i][a] * Y.GET_M()[a][j]) / Y.GET_M()[a][a];
                    }
    }
    R = Destrib(pc);
    if (R == 1)
        for(i = 0;i < N;i++)
            for(j = 0;j < N;j++)
            {
                A.GET_M()[i][j] += ((Kronecker(a,j) - Kronecker(a-1,j))*(Kronecker(a,i) - Kronecker(a-1,i)));
            }
    if (a == N-1)   // !!!!!!!!!!!!
    {
        a = 1;
        l++;
    }
    else
        a++;
        */
    double R;
    int i,j;
    //MATRIX Y(A.GET_m());
    Y = A;
    //R = Destrib(pc);
    R = Kronecker((a + l % 2) % 2,0) * R1 + Kronecker((a + l % 2)% 2,1) * R2;
    if (a != N-1)
    {
        if (R != 0)
        {
            if (Y.GET_M()[a][a] != 0)
            for(i = 0;i < N;i++)
                for(j = 0;j < N;j++)
                    A.GET_M()[i][j] -= Y.GET_M()[i][a] * Y.GET_M()[a][j] / (1 + Y.GET_M()[a][a] * R);
        }
        else
        {
            if (!(Y.GET_M()[a][a] < 0.00000000001 && Y.GET_M()[a][a] > -0.00000000001))

            {
                for(i = 0;i < N;i++)
                    for(j = 0;j < N;j++){
                        A.GET_M()[i][j] -= Y.GET_M()[i][a] * Y.GET_M()[a][j] / Y.GET_M()[a][a];

                    }
            }
        }
    }
    //R = Destrib(pc);
    R = Kronecker((a + l % 2) % 2,0) * R1 + Kronecker((a + l % 2) % 2,1) * R2;
    if (R != 0)
    {
        for(i = 0;i < N;i++)
            for(j = 0;j < N;j++)
                A.GET_M()[i][j] += (Kronecker(a,j) - Kronecker(a - 1,j)) * (Kronecker(a,i) - Kronecker(a - 1,i)) / R;
    }
    if (a == N - 1)
    {
        a = 1;
        l++;
    }
    else
        a++;

}