「nr2(API)」の版間の差分

提供: Eospedia
移動: 案内検索
行31: 行31:
 
  extern void free_matrix(float** m, long nrl, long nrh, long ncl, long nch);
 
  extern void free_matrix(float** m, long nrl, long nrh, long ncl, long nch);
  
===2.1 ガウス・ジョルダン法===
+
===ガウス・ジョルダン法===
 
  extern void gaussj(float **a, int n, float **b, int m);
 
  extern void gaussj(float **a, int n, float **b, int m);
  
===2.3 LU Decomposition and Its Applications===
+
===LU Decomposition and Its Applications===
 
LU分解
 
LU分解
 
  extern void ludcmp(float** a, int n, int* indx, float* d);
 
  extern void ludcmp(float** a, int n, int* indx, float* d);
 
  extern void lubksb(float** a, int n, int* indx, float b[]);
 
  extern void lubksb(float** a, int n, int* indx, float b[]);
  
===6.1 ログガンマ関数===
+
===ログガンマ関数===
 
ログガンマ関数(Lanczos近似)
 
ログガンマ関数(Lanczos近似)
 
  extern float gammln(float xx);
 
  extern float gammln(float xx);
  
===6.2 ガンマ関数===
+
===ガンマ関数===
 
正規化された不完全補ガンマ関数
 
正規化された不完全補ガンマ関数
 
  extern float gammp(float a, float x);
 
  extern float gammp(float a, float x);
行57: 行57:
 
  extern float erffc(float x);
 
  extern float erffc(float x);
  
===6.4 ベータ関数===
+
===ベータ関数===
 
正規化ベータ関数
 
正規化ベータ関数
 
  extern float betai(float a, float b, float x);
 
  extern float betai(float a, float b, float x);
行63: 行63:
 
  extern float betacf(float a, float b, float x);
 
  extern float betacf(float a, float b, float x);
  
===8.2 Sorting===
+
===Sorting===
 
サイズnの配列arrをソート
 
サイズnの配列arrをソート
 
  extern void sort(unsigned long n, float arr[]);
 
  extern void sort(unsigned long n, float arr[]);
  
===8.5 Sorting===
+
===Sorting===
 
サイズnの配列arrをソートし、k番目を得る
 
サイズnの配列arrをソートし、k番目を得る
 
  extern float nrselect(unsigned long k, unsigned long n, float arr[]);
 
  extern float nrselect(unsigned long k, unsigned long n, float arr[]);
  
===11.1 行列の対角化 ===
+
===行列の対角化 ===
 
ヤコビ行列
 
ヤコビ行列
 
  extern void jacobi(float** a, int n, float d[], float** v, int* nrot);
 
  extern void jacobi(float** a, int n, float d[], float** v, int* nrot);
行77: 行77:
 
  extern void eigsrt(float d[], float** v, int n);
 
  extern void eigsrt(float d[], float** v, int n);
  
=== 13.10 Wavelet Transforms===  
+
=== Wavelet Transforms===  
 
ウェーブレット変換(isginが0以上でウェーブレット変換、負で逆変換)
 
ウェーブレット変換(isginが0以上でウェーブレット変換、負で逆変換)
 
  extern void wt1(float a[], unsigned long n, int isign, void (*wtstep)(float[], unsigned long, int));
 
  extern void wt1(float a[], unsigned long n, int isign, void (*wtstep)(float[], unsigned long, int));
行87: 行87:
 
  extern void wtn(float a[], unsigned long nn[], int ndim, int isign, void (*wtstep)(float[], unsigned long, int));
 
  extern void wtn(float a[], unsigned long nn[], int ndim, int isign, void (*wtstep)(float[], unsigned long, int));
 
   
 
   
=== 10.1 黄金分割法===   
+
===黄金分割法===   
 
  extern void mnbrak(float* ax, float *bx, float* cx, float* fa, float* fb, float* fc, float (*func)(float));
 
  extern void mnbrak(float* ax, float *bx, float* cx, float* fa, float* fb, float* fc, float (*func)(float));
 
   
 
   
=== 10.2 ブレント法 ===   
+
===ブレント法 ===   
 
  extern float brent(float ax, float bx, float cx, float (*f)(float), float tol, float* xmin);
 
  extern float brent(float ax, float bx, float cx, float (*f)(float), float tol, float* xmin);
 
   
 
   
=== 10.5 線形最小二乗法 ===   
+
===線形最小二乗法 ===   
 
  extern void linmin(float p[], float xi[], int n, float *fret, float (*func)(float[]));
 
  extern void linmin(float p[], float xi[], int n, float *fret, float (*func)(float[]));
  
===10.6 ConjugateGradientMethods===
+
===ConjugateGradientMethods===
 
  extern void frprmn(float p[], int n, float ftol, int *iter, float* fret,  
 
  extern void frprmn(float p[], int n, float ftol, int *iter, float* fret,  
 
         float (*func)(float[]), void (*dfunc)(float[], float []));
 
         float (*func)(float[]), void (*dfunc)(float[], float []));
行102: 行102:
 
         float (*func)(float[]), void (*dfunc)(float[], float []));
 
         float (*func)(float[]), void (*dfunc)(float[], float []));
  
===15.2 フィッティング===
+
===フィッティング===
 
入力:(x, y)座標のデータndataをガンマ関数gammqにデータをフィッティングし、データをqに格納します。
 
入力:(x, y)座標のデータndataをガンマ関数gammqにデータをフィッティングし、データをqに格納します。
 
  extern void fit(float x[], float y[], int ndata, float sig[], int mwt, float* a, float* b, float* siga, float* sigb, float* chi2, float* q);
 
  extern void fit(float x[], float y[], int ndata, float sig[], int mwt, float* a, float* b, float* siga, float* sigb, float* chi2, float* q);
  
===15.5 Levenberg-Marquardt法===
+
===Levenberg-Marquardt法===
 
  extern void mrqmin(float x[], float y[], float sig[], int n, float a[], int ia[], int ma, float** covar, float** alpha, float* chisq, void (*func)(float x, float p[], float* y, float dyda[], int na), float *alamda);  
 
  extern void mrqmin(float x[], float y[], float sig[], int n, float a[], int ia[], int ma, float** covar, float** alpha, float* chisq, void (*func)(float x, float p[], float* y, float dyda[], int na), float *alamda);  
  
===15.7 Median Fit===
+
===Median Fit===
 
  extern void medfit(float x[], float y[], int ndata, float* a, float* b, float* abdev);
 
  extern void medfit(float x[], float y[], int ndata, float* a, float* b, float* abdev);
 
ロバスト推定
 
ロバスト推定
 
  extern float rofunc(float b);
 
  extern float rofunc(float b);

2015年3月10日 (火) 23:38時点における版

DataManip/MATH/src/nr2は数式を使用するためのAPIです。

定数

static float maxarg1;
static float maxarg2;

構造体

API

a, bの最大値を出力します。

#define FMAX(a,b) (maxarg1=(a),maxarg2=(b),(maxarg1)>(maxarg2)?(maxarg1):(maxarg2))

bと同じ符号でaを出力します。

#define SIGN(a,b) ((b)>0.0?fabs(a):-fabs(a))

Utilities

エラーメッセージを表示します。

extern void nrerror(char error_txt[]);

ベクトル

ベクトル生成(nl 〜 nh: 成分)

extern float* vector(long nl, long nh);
extern int* ivector(long nl, long nh);

ベクトル解放

extern void free_vector(float* v, long nl, long nh);
extern void free_ivector(int* v, long nl, long nh);

行列

行列生成(nrl 〜 nrh: 行, ncl 〜 nch: 列)

extern float** matrix(long nrl, long nrh, long ncl, long nch);

行列解放

extern void free_matrix(float** m, long nrl, long nrh, long ncl, long nch);

ガウス・ジョルダン法

extern void gaussj(float **a, int n, float **b, int m);

LU Decomposition and Its Applications

LU分解

extern void ludcmp(float** a, int n, int* indx, float* d);
extern void lubksb(float** a, int n, int* indx, float b[]);

ログガンマ関数

ログガンマ関数(Lanczos近似)

extern float gammln(float xx);

ガンマ関数

正規化された不完全補ガンマ関数

extern float gammp(float a, float x);

正規化された不完全ガンマ関数

extern float gammq(float a, float x);

第2種不完全ガンマ関数

extern void gser(float* gamser, float a, float x, float* gln);

第1種不完全ガンマ関数

extern void gcf (float* gammcf, float a, float x, float* gln);

誤差関数

extern float erff(float x);

補誤差関数

extern float erffc(float x);

ベータ関数

正規化ベータ関数

extern float betai(float a, float b, float x);

不完全ベータ関数

extern float betacf(float a, float b, float x);

Sorting

サイズnの配列arrをソート

extern void sort(unsigned long n, float arr[]);

Sorting

サイズnの配列arrをソートし、k番目を得る

extern float nrselect(unsigned long k, unsigned long n, float arr[]);

行列の対角化

ヤコビ行列

extern void jacobi(float** a, int n, float d[], float** v, int* nrot);

固有ベクトルのソート

extern void eigsrt(float d[], float** v, int n);

Wavelet Transforms

ウェーブレット変換(isginが0以上でウェーブレット変換、負で逆変換)

extern void wt1(float a[], unsigned long n, int isign, void (*wtstep)(float[], unsigned long, int));

Daubechies 4-coefficient Wavelet Filter(isginが0以上でウェーブレット変換、負で逆変換)

extern void daub4(float a[], unsigned long n, int isign);
extern void pwtset(int n);
extern void pwt(float a[], unsigned long n, int isign);
extern void wtn(float a[], unsigned long nn[], int ndim, int isign, void (*wtstep)(float[], unsigned long, int));

黄金分割法

extern void mnbrak(float* ax, float *bx, float* cx, float* fa, float* fb, float* fc, float (*func)(float));

ブレント法

extern float brent(float ax, float bx, float cx, float (*f)(float), float tol, float* xmin);

線形最小二乗法

extern void linmin(float p[], float xi[], int n, float *fret, float (*func)(float[]));

ConjugateGradientMethods

extern void frprmn(float p[], int n, float ftol, int *iter, float* fret, 
       float (*func)(float[]), void (*dfunc)(float[], float []));
extern void frprmn2(float p[], int n, float ftol, int *iter, float* fret, 
       float (*func)(float[]), void (*dfunc)(float[], float []));

フィッティング

入力:(x, y)座標のデータndataをガンマ関数gammqにデータをフィッティングし、データをqに格納します。

extern void fit(float x[], float y[], int ndata, float sig[], int mwt, float* a, float* b, float* siga, float* sigb, float* chi2, float* q);

Levenberg-Marquardt法

extern void mrqmin(float x[], float y[], float sig[], int n, float a[], int ia[], int ma, float** covar, float** alpha, float* chisq, void (*func)(float x, float p[], float* y, float dyda[], int na), float *alamda); 

Median Fit

extern void medfit(float x[], float y[], int ndata, float* a, float* b, float* abdev);

ロバスト推定

extern float rofunc(float b);