1. 如何在C/C++中使用lapack库中的函数:
通常,应该如下声明需要使用的lapack函数:
extern "C" {
extern void sgetrf_(int*, int*, float*, int*, int*, int*);
extern void sgetri_(int*, float*, int*, int*, float*, int*, int*);
extern void sgetrs_(char*, int*, int*, float*, int*, int*, float*, int*, int*);
extern void sgesvd_(char*, char*, int*, int*, float*, int*, float*, float*, int*, float*, int*, float*, int*, int*);
extern void ssyev_(char*, char*, int*, float*, int*, float*, float*, int*, int*);
extern void dgetrf_(int*, int*, double*, int*, int*, int*);
extern void dgetri_(int*, double*, int*, int*, double*, int*, int*);
extern void dgetrs_(char*, int*, int*, double*, int*, int*, double*, int*, int*);
extern void dgesvd_(char*, char*, int*, int*, double*, int*, double*, double*, int*, double*, int*, double*, int*, int*);
extern void dsyev_(char*, char*, int*, double*, int*, double*, double*, int*, int*);
}
注意:声明的时候返回值改为void,跟头文件里函数的返回值类型为int不同;
使用如下方法包含头文件时,编译时经常发生错误。
extern "C" {
#include "f2c.h"
#include "clapack.h"
#include "blaswrap.h"
}
2.矩阵的数组的存储方式 :
Fortran和matlab语言中的多维数组存储方式为列优先或列主序原则,内循环最好是列循环;而c语言中的多维数组存储方式为行优先原则或行主序,内循环最好是行循环。
1)行优先顺序
将数组元素按行向量排列,第i+1个行向量紧接在第i个行向量后面。这种是自然的存储方法,跟概念中的矩阵相似。
【例】二维数组Amn的按行优先存储的线性序列为:
a11,a12,…,a1n,a21,a22,…,a2n,……,am1,am2,…,amn
行优先顺序推广到多维数组,可规定为先排最右的下标。