C++のLapackパッケージを使用して線形方程式系を解きたい。ここからのルーチン、つまりdgesvを使用して、このように実装する予定です。
これは私のコードです:
unsigned short int n=profentries.size();
double **A, *b, *x;
A= new double*[n];
b=new double[n];
x=new double[2];
// Generate the matrices for my equation
for(int i = 0; i < n; ++i)
{
A[i] = new double[2];
}
for(int i=0; i<n; i++)
{
A[i][0]=5;
A[i][1]=1;
b[i]=3;
}
std::cout<< "printing matrix A:"<<std::endl;
for(int i=0; i<n; i++)
{
std::cout<< A[i][0]<<" " <<A[i][1]<<std::endl;
}
// Call the LAPACK solver
x = new double[n];//probably not necessary
dgesv(A, b, 2, x); //wrong result for x!
std::cout<< "printing vector x:"<<std::endl;
/*prints
3
3
but that's wrong, the solution is (0.6, 0)!
*/
for(int i=0; i<2; i++)
{
std::cout<< x[i]<<std::endl;
}
私は次の問題を抱えています:
dgesvが要素{3、3}を使用してベクトルxを計算するのはどうしてですか?解は{0.6、0}である必要があります(matlabで確認)。
ご挨拶
編集:dgesvは正方行列に対して機能する可能性があります。以下の私の解決策は、dgelsを使用して過剰決定系を解決する方法を示しています。