Я безуспешно получил некоторые результаты с помощью функций 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");
}