dgeqrf Лапака в С++

Мой проект посвящен поиску Q в QR-разложении для очень больших матриц (например, 500*500) в C++. Недавно я начал использовать пакет Lapack и его особую функцию "dgeqrf". Я начал с простой матрицы, как показано ниже в Code:blocks:

 #include <iostream>
 #include <lapacke.h>

using namespace std;

int main()
{
    double a[6][2] = {{0,2},{2,-1},{2,-1},{0,1.5},{2,-1},{2,-1}};
    int m=6;
    int n=2;
    int info = 0;
    int lda = m;
    int lwork = n;
    double *work;
    double *tau;
    dgeqrf_(&m, &n, a, &lda, tau, work, &lwork, &info);

}

После запуска кода я увидел эту ошибку в строке «dgeqrf»:

error: cannot convert 'double (*)[2]' to 'double*' for argument '3' to 'void dgeqrf_(int*, int*, double*, int*, double*, double*, int*, int*)'

Кто может помочь мне с этой ошибкой? У меня ошибка в определении параметра? Кроме того, после запуска, как я могу работать с матрицей Q? Могу ли я определить новую матрицу double q[][]=dgeqrf(....) и использовать ее в своем проекте? Извините, если мой вопрос был очень простым, но я не смог найти решение.


person Ham82    schedule 03.12.2016    source источник
comment
похоже, что dgeqrf_ ожидает, что a будет сглаженным массивом   -  person tinkertime    schedule 03.12.2016
comment
Добро пожаловать в Stackoverflow. Ответ @yankee2905 исправляет ошибку, о которой вы сообщили. Вы не хотите принимать его ответ, потому что он раскрывает вашу следующую проблему. Один вопрос за раз на SO. Если вы просто хотите, чтобы ваши проблемы были решены до тех пор, пока ваш проект не будет завершен, я боюсь, что это неправильное место. Ваша следующая проблема заключается в том, что вы не связываете библиотеку, в которой определено dgeqrf_. Ваш следующий вопрос: Как связать библиотеку с Code::Blocks?   -  person Mike Kinghan    schedule 03.12.2016
comment
@MikeKinghan Спасибо за ваш ответ. Я сделал процедуру в рекомендованной ссылке раньше. Кроме того, я попробовал библиотеку Armadillo, и я могу выполнить там несколько простых вычислений, но я не смог выполнить QR-разложение из-за этой ошибки: неопределенные ссылки на _gfortran_compare_string. Также у меня есть эта проблема в DEV C++. Кажется, проблема на этапе установки.   -  person Ham82    schedule 04.12.2016


Ответы (1)


person    schedule
comment
Я сделал это. Но пока это не работает. Теперь code::Blocks показывает новую ошибку: неопределенная ссылка на `dgeqrf_'. Меня это смутило. - person Ham82; 03.12.2016