Понимание Вызовы LAPACK на C++ с простым примером

Я новичок в интерфейсах LAPACK и C++/Fortran. Мне нужно решить линейные уравнения и задачи на собственные значения с помощью LAPACK/BLAS в Mac OS -X Lion. OS -X Lion предоставляет оптимизированные библиотеки BLAS и LAPACK (в /usr/lib ), и я связываю эти библиотеки вместо того, чтобы загружать их из netlib.

Моя программа (, воспроизведенная ниже ), компилируется и работает нормально, но дает неверные ответы. Я исследовал в Интернете и Stackoverflow, и проблема, возможно, связана с тем, как C++ и Fortran хранят массивы в разных форматах (основных строк и основных столбцов ). Однако, как вы увидите на моем примере,простой массив для моего примера должен выглядеть одинаково в C++ и fortran. Во всяком случае здесь идет.

Допустим, мы хотим решить следующую линейную систему:

x + y = 2

x -y = 0

Решение (x,y )= (1,1 ). Теперь я попытался решить это с помощью Lapack следующим образом

// LAPACK test code

#include<iostream>
#include<vector>

using namespace std;
extern "C" void dgetrs(char *TRANS, int *N, int *NRHS, double *A, 
                      int *LDA, int *IPIV, double *B, int *LDB, int *INFO );

int main()
{
    char trans = 'N';
    int dim = 2;    
    int nrhs = 1;
    int LDA = dim;
    int LDB = dim;
    int info;

    vector<double> a, b;

    a.push_back(1);
    a.push_back(1);
    a.push_back(1);
    a.push_back(-1);

    b.push_back(2);
    b.push_back(0);

    int ipiv[3];


    dgetrs(&trans, &dim, &nrhs, & *a.begin(), &LDA, ipiv, & *b.begin(), &LDB, &info);


    std::cout << "solution is:";    
    std::cout << "[" << b[0] << ", " << b[1] << ", " << "]" << std::endl;
    std::cout << "Info = " << info << std::endl; 

    return(0);
}

Этот код был скомпилирован следующим образом:

g++ -Wall -llapack -lblas lapacktest.cpp

Однако при запуске я получаю решение как (-2,2 ), что явно неверно. Я испробовал все комбинации расположения строк/столбцов -в моей матрице a. Также обратите внимание, что матричное представление aдолжно быть идентичным в форматах строки и столбца. Я думаю, что этот простой пример поможет мне начать работу с LAPACK, и любая помощь будет оценена по достоинству.

18
задан Stephen Canon 11 April 2012 в 19:25
поделиться