-
Notifications
You must be signed in to change notification settings - Fork 1
/
pcg.h
33 lines (26 loc) · 1.03 KB
/
pcg.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#ifndef __PCG___
#define __PCG___
#include <cv.h>
#include <stdio.h>
#include "compressiveSensing.h"
// Preconditioned Conjugate Gradient
// 前処理付き共役勾配法
// Ax = b の方程式をxについて解く手法
// 前処理付き行列として Pinv * A ~ I
// になるような行列を渡す
void PCG( CvMat* A, CvMat* b, CvMat* x, CvMat* Pinv, double th);
/************************************************************
前処理付き共役勾配法(PCG)
の行列の積の演算をオペレータで行うバージョン
疎な行列に対して、A'Aを計算するのは計算量が
大きくなるが、行列×ベクトルを2回演算する
ことで計算量を削減する
mulA は y = Ax を、
mulPinv は y = Pinv*x
をそれぞれ計算する.
************************************************************/
void PCG_MatMulOperator( void (*mulA)( CSstruct* cs, CvMat* u, CvMat* y),
CvMat* b, CvMat* x,
void (*mulPinv)( CSstruct* cs, CvMat* u, CvMat* y),
double th, CSstruct* cs);
#endif