mat_orth.cpp

来自「本程序将独立分量分析技术和数字水印技术有机地结合在一起」· C++ 代码 · 共 36 行

CPP
36
字号
#include <malloc.h>

void mat_transpose (float *, int , int , float *);
void mat_mult (float *, int , int , float *, int , int , float *);
int svd(float *, int , int , float *, float *);
/*mat_orth-矩阵正交化子程序
 *矩阵orthog是矩阵mat的一个正交基,它的模为1
 */
void mat_orth (float *mat, int n, float *orthog)
{
	
	float *u, *v, *d, *temp;
	int i;
	
	
	u =(float*) malloc(n * n* sizeof(float));
	d =(float*) malloc(n* sizeof(float));
	v =(float*) malloc(n * n* sizeof(float));
	temp =(float*) malloc(n * n* sizeof(float));
	
	for (i = 0; i < n; i++) {
		u[i * n + i] = mat[i * n + i];
	}
	svd (u, n, n, d, v);
	for (i = 0; i < n; i++) {
		temp[i * n + i] = 1 / (d[i]);
	}
	
	mat_mult (u, n, n, temp, n, n, v);
	mat_transpose (u, n, n, temp);
	mat_mult (v, n, n, temp, n, n, u);
	mat_mult (u, n, n, mat, n, n, orthog);
	
	
}

⌨️ 快捷键说明

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