Lib/mt.c File Reference

数学用ライブラリ More...

#include "mt.h"
Include dependency graph for mt.c:

Go to the source code of this file.

Defines

#define MAX_ITRTN_NEWTON_METHOD   30
 ニュートン法で解を求める際の,最大繰り返し回数.

Functions

double power (double x, double y)
double fact (int n)
double perm (int n, int m)
double comb (int n, int m)
int newton_method (PTR_DFFUNC func, PTR_DFFUNC dfunc, double *t0, double eps)
 ニュートン法で解を求める

Variables

double EPS = 1.0e-6

Detailed Description

Author:
Fumi.Iseki (C)

Definition in file mt.c.


Define Documentation

#define MAX_ITRTN_NEWTON_METHOD   30

Definition at line 93 of file mt.c.

Referenced by newton_method().


Function Documentation

double comb ( int  n,
int  m 
)

double comb(int n, int m)

コンビネーション nCm を計算する.

Definition at line 77 of file mt.c.

00078 {
00079     int    i;
00080     double c, p;
00081 
00082     if (m>n || n<=0 || m<=0) return 0.;
00083 
00084     p = c = 1.0;
00085     for (i=n-m+1; i<=n; i++) p = p*(double)i;
00086     for (i=1;     i<=m; i++) c = c*(double)i;
00087 
00088     return p/c;
00089 }

double fact ( int  n  ) 

double fact(int n)

nの階乗 n! を計算する.n>0 でない場合は 1.0 を返す.

Definition at line 39 of file mt.c.

00040 {
00041     int    i;
00042     double ret = 1.0;
00043 
00044     if (n>0) for (i=1; i<=n; i++)  ret = ret*(double)i;
00045     return ret;
00046 }

int newton_method ( PTR_DFFUNC  func,
PTR_DFFUNC  dfunc,
double *  t0,
double  eps 
)

int newton_method(PTR_DFFUNC func, PTR_DFFUNC dfunc, double* t0, double eps)

ニュートン法で func()==0 の点を求める.
関数の形は double func(double)

Parameters:
func double func(double) 型の関数へのポインタ
dfunc func()の導関数へのポインタ.
[in,out] t0 in: 探索開始点(xの初期値), out: 解.
eps 誤差.1に対して 1.0e-8 など.
Returns:
解を求めるまでの繰り返し回数.0 の場合は失敗.
See also:
PTR_DFFUNC, MAX_ITRTN_NEWTON_METHOD

Definition at line 109 of file mt.c.

References MAX_ITRTN_NEWTON_METHOD, and Xabs.

00110 {
00111     double tt  = *t0;
00112     double ff  = (*func)(tt);
00113 
00114     int n = 1;
00115     while (n<MAX_ITRTN_NEWTON_METHOD && Xabs(ff)>eps) {
00116         //
00117         double df = (*dfunc)(tt);
00118         if (Xabs(df)<eps) return 0;
00119 
00120         tt = tt - ff/df;
00121         ff = (*func)(tt);
00122         n++;
00123     }
00124 
00125     if (n==MAX_ITRTN_NEWTON_METHOD) return 0;
00126     *t0 = tt;
00127     return n;
00128 }

double perm ( int  n,
int  m 
)

double perm(int n, int m)

パームテーション nPm を計算する.

Definition at line 56 of file mt.c.

00057 {
00058     int    i;
00059     double p;
00060 
00061     if (m>n || n<=0 || m<=0) return 0.;
00062 
00063     p = 1.0;
00064     for (i=n-m+1; i<=n; i++) p = p*(double)i;
00065 
00066     return p;
00067 }

double power ( double  x,
double  y 
)

double power(double x, double y)

xの y乗 x^yを計算する.

Definition at line 24 of file mt.c.

00025 {
00026     if (y==0.0)      return 1.0;
00027     else if (x==0.0) return 0.0;
00028     else return exp((y)*log(x));
00029 }


Variable Documentation

double EPS = 1.0e-6

Definition at line 14 of file mt.c.

Referenced by topola(), unit_ivector(), and unit_vector().


Generated on 15 Nov 2023 for JunkBox_Lib by  doxygen 1.6.1