martinsutils.h

来自「Code for L2-optimal three view triangula」· C头文件 代码 · 共 76 行

H
76
字号
#ifndef MARTINSUTILS#define MARTINSUTILS// #include"defineOs.h"#define LINUX_OS//#define DEBUG#define A(i, j, m) A[j * m + i]#define B(i, j, m) B[j * m + i]#define X(i, j, m) X[j * m + i]#ifdef MAC_OS#include<veclib/cblas.h>#include<veclib/clapack.h>#define blasCopy(x, y, n) cblas_dcopy(n, x, 1, y, 1)#define xDoty(x, y, n) cblas_ddot(n, x, 1, y, 1);#define ATimesx(A, x, y, m, n) cblas_dgemv(CblasColMajor, CblasNoTrans, m, n, 1, A, m, x, 1, 0, y, 1);#define ATimesB(A, B, C, m, k, n) cblas_dgemm(CblasColMajor, CblasNoTrans, CblasNoTrans, m, n, k, 1, A, m, B, k, 0, C, m)#define solve(A, B, m, n, p, info) dgesv_((__CLPK_integer*)&m, (__CLPK_integer*)&n, (__CLPK_doublereal*)A, (__CLPK_integer*)&m, (__CLPK_integer*)p, (__CLPK_doublereal*)B, (__CLPK_integer*)&m, (__CLPK_integer*)info);#endif#ifdef LINUX_OS#include<acml.h>#define __CLPK_doublereal double#define __CLPK_integer int#define blasCopy(x, y, n) dcopy(n, x, 1, y, 1)#define xDoty(x, y, n) ddot(n, x, 1, y, 1)#define ATimesx(A, x, y, m, n) dgemv('N', m, n, 1, A, m, x, 1, 0, y, 1)#define ATimesB(A, B, C, m, k, n) dgemm('N', 'N', m, n, k, 1, A, m, B, k, 0, C, m)#define solve(A, B, m, n, p, info) dgesv(m, n, A, m, p, B, m, info);#endifvoid lu_u(double *A, int m, int n);void luZero(double *u, int m, int n);double median(double *x, int n);void solve_ls(double *A, double *B, int m, int k, int n, int *info);void qr(__CLPK_doublereal *A,	__CLPK_integer m,	__CLPK_integer n,	__CLPK_doublereal *R,	__CLPK_integer p[]);void echelon(double *A, int m, int n);void rowOperate(double* A, int destRow, int opRow, double factor,		int m, int n);void printMatrix(double* A, int m, int n, char* name);void printMatrixTranspose(double* A, int m, int n, char* name);void printMatrix(__CLPK_integer* A, int m, int n, char* name);void fprintMatrix(double* A, int m, int n, const char* fileName);int freadMatrix(double* A, int m, int n, const char* fileName);void eye(double *A, int n);void zeros(double *A, int m, int n);void ones(double *A, int m, int n);void rand(double *A, int m, int n);inline void getRow(int rowNumber, double *row, double *A, int m, int n) {  for(int i = 0; i < n; i ++)    row[i] = A[m * i + rowNumber];};#endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?