测试环境:
vs2019
clapack==3.2.1
源码:
#define _CRT_SECURE_NO_WARNINGS
#include "stdio.h"
#include "f2c.h"
// 因为程序是 C++ ,而 CLAPACK 是 C 语言写的,所以在此处用 extern 关键字
extern "C"
{
#include <clapack.h>
}
#define SIZE 4
int main()
{
char JOBU;
char JOBVT;
int i;
integer M = SIZE;
integer N = SIZE;
integer LDA = M;
integer LDU = M;
integer LDVT = N;
integer LWORK;
integer INFO;
integer mn = min(M, N);
integer MN = max(M, N);
double a[SIZE * SIZE] = { 16.0, 5.0, 9.0, 4.0, 2.0, 11.0, 7.0, 14.0, 3.0, 10.0, 6.0, 15.0, 13.0, 8.0, 12.0, 1.0 };
double s[SIZE];
double wk[201];
double uu[SIZE * SIZE];
double vt[SIZE * SIZE];
JOBU = 'A';
JOBVT = 'A';
LWORK = 201;
/* Subroutine int dgesvd_(char *jobu, char *jobvt, integer *m, integer *n,
doublereal *a, integer *lda, doublereal *s, doublereal *u, integer *
ldu, doublereal *vt, integer *ldvt, doublereal *work, integer *lwork,
integer *info)
*/
dgesvd_(&JOBU, &JOBVT, &M, &N, a, &LDA, s, uu,
&LDU, vt, &LDVT, wk, &LWORK, &INFO);
if (INFO > 0) {
printf("The algorithm computing SVD failed to converge\n");
return 1;
}
for (i = 0; i < SIZE; i++) {
printf("\n s[ %d ] = %f", i, s[i]);
}
return 0;
}
运行结果: