Xcode dgeqrf и dorgqr неправильные результаты qr-факторизации - PullRequest
0 голосов
/ 26 мая 2020

Я безуспешно получил некоторые результаты с помощью функций dorgqr и dgeqrf в ускоренном фреймворке Xcode, исходная матрица

 4     1
 3     1

Матрица R, полученная с помощью кода,

-4.123106 0,123106
0,000000 0,242536

Матрица Q, полученная с помощью кода:

-0,970143 -0,242536
-0,242536 0,970143

Я использовал matlab для подтверждения этих результатов с помощью функции qr (), а матрица R имеет вид

-5,0000 -1,4000

     0    0.2000

матрица Q

-0,8000 -0,6000

-0,6000 0,8000

Похоже, мой код не работает должным образом, здесь я перечисляю его, чтобы получить от вас помощь:

__CLPK_doublereal A[2][2] = {{4,1}, {3,1}};

int row, columns;

for (row=0; row<2; row++)
{
    for(columns=0; columns<2; columns++)
    {
        printf("%f   ", A[row][columns]);
    }
    printf("\n");
}

printf("\n");

__CLPK_integer m = 2;
__CLPK_integer n = 2;
__CLPK_doublereal tau[n];
__CLPK_doublereal work[n];
__CLPK_integer lwork = n;
__CLPK_integer info = 0;

dgeqrf_(&m, &n, &A[0][0], &m, tau, work, &lwork, &info);

for (row=0; row<2; row++)
{
    for(columns=0; columns<2; columns++)
    {
        if (row<=columns)
        {printf("%f   ", A[row][columns]);}
        else
        {printf("%f   ", 0.0);}
    }
    printf("\n");
}

printf("\n");

dorgqr_(&m, &n, &n, &A[0][0], &m, tau, work, &lwork, &info);


for (row=0; row<2; row++)
{
    for(columns=0; columns<2; columns++)
    {
        printf("%f   ", A[row][columns]);
    }
    printf("\n");
}
...