mathkit  2.0
 All Classes Namespaces Functions Variables Typedefs
mathkit.hpp
1 
23 #ifndef MATHKIT_HPP
24 #define MATHKIT_HPP
25 
26 #include <cmath>
27 #include <vector>
28 #include <string>
29 #include <utility>
30 #include <iostream>
31 
32 using std::abs;
33 using std::atan;
34 using std::vector;
35 using std::string;
36 using std::pair;
37 using std::make_pair;
38 using std::istream;
39 using std::ostream;
40 
44 namespace mathkit {
45 
49  const double pi = 4 * atan(1.0);
50 
54  typedef vector<double> Vector;
55 
59  typedef vector<vector<double> > Table;
60 
64  typedef pair<double, double> Pair;
65 
69  typedef vector<pair<double, double> > Pairs;
70 
74  class Epsilon {
75  private:
76  double _eps;
77  public:
82  Epsilon(double eps = 1e-6) {_eps = eps;}
83 
89  bool operator()(double val) const;
90 
95  double operator()() const;
96  };
97 
101  struct LineParam {
105  double slope;
106 
110  double intercept;
111 
115  double det_coef;
116 
120  double variance;
121  };
122 
130  double pv(double amount, double rate, double period);
131 
139  double fv(double amount, double rate, double period);
140 
147  double pv_coef(double rate, double period);
148 
155  double fv_coef(double rate, double period);
156 
165  double apv(double annuity, double rate, int period, bool prepaid = false);
166 
175  double afv(double annuity, double rate, int period, bool prepaid = false);
176 
184  double apv_coef(double rate, int period, bool prepaid = false);
185 
193  double afv_coef(double rate, int period, bool prepaid = false);
194 
203  double spv(const Vector & amount, double rate, bool prepaid = false);
204 
212  double sfv(const Vector & amount, double rate, bool prepaid = false);
213 
222  double comp_rate(double pval, double fval, double period);
223 
229  double mean(const Vector & data);
230 
237  double median(const Vector & data, bool sorted = false);
238 
246  double var(const Vector & data, bool sample = true);
247 
255  double sd(const Vector & data, bool sample = true);
256 
265  double cov(const Vector & data1, const Vector & data2, bool sample = true);
266 
273  double cor(const Vector & data1, const Vector & data2);
274 
282  double moment(const Vector & data, int k, bool central = true);
283 
289  double skew(const Vector & data);
290 
297  double kurt(const Vector & data, bool excess = true);
298 
305  double dexp(double theta, double x);
306 
313  double pexp(double theta, double x);
314 
322  double qexp(double theta, double p, const Epsilon & eps = Epsilon());
323 
331  double dnorm(double x, double mu = 0, double sigma = 1);
332 
341  double pnorm(double x, double mu = 0, double sigma = 1, const Epsilon & eps = Epsilon());
342 
351  double qnorm(double p, double mu = 0, double sigma = 1, const Epsilon & eps = Epsilon());
352 
359  double dt(double x, int n);
360 
368  double pt(double x, int n, const Epsilon & eps = Epsilon());
369 
377  double qt(double p, int n, const Epsilon & eps = Epsilon());
378 
385  double dchisq(double x, int k);
386 
393  double pchisq(double x, int k);
394 
402  double qchisq(double p, int k, const Epsilon & eps = Epsilon());
403 
411  double df(double x, int d1, int d2);
412 
420  double pf(double x, int d1, int d2);
421 
430  double qf(double p, int d1, int d2, const Epsilon & eps = Epsilon());
431 
439  double pois(double lmd, int k, bool cum = false);
440 
449  double binom(int n, double p, int k, bool cum = false);
450 
459  double nb(int k, double p, int x, bool cum = false);
460 
470  double hg(int s, int k, int n, int x, bool cum = false);
471 
477  double gamma(double x);
478 
484  double lgamma(double x);
485 
493  double igamma(double s, double x, const Epsilon & eps = Epsilon(1e-15));
494 
501  double beta(double x, double y);
502 
509  double lbeta(double x, double y);
510 
519  double ibeta(double x, double a, double b, const Epsilon & eps = Epsilon(1e-15));
520 
528  LineParam linregress(const Vector & xdata, const Vector & ydata);
529 
536  Vector sample(const Vector & data, int n);
537 
545  Vector seq(double from, double to, double step = 1);
546 
554  Vector linspace(double start, double end, int count = 100);
555 
561  double max(const Vector & data);
562 
568  double min(const Vector & data);
569 
575  double sum(const Vector & data);
576 
582  double prod(const Vector & data);
583 
590  Vector add(const Vector & vec1, const Vector & vec2);
591 
599  Vector add(const Vector & vec, double scalar);
600 
607  Vector operator+(const Vector & vec1, const Vector & vec2);
608 
616  Vector operator+(const Vector & vec, double scalar);
617 
625  Vector operator+(double scalar, const Vector & vec);
626 
633  Vector sub(const Vector & vec1, const Vector & vec2);
634 
643  Vector sub(const Vector & vec, double scalar, bool dir = true);
644 
651  Vector operator-(const Vector & vec1, const Vector & vec2);
652 
660  Vector operator-(const Vector & vec, double scalar);
661 
669  Vector operator-(double scalar, const Vector & vec);
670 
677  Vector mul(const Vector & vec1, const Vector & vec2);
678 
685  Vector mul(const Vector & vec, double scalar);
686 
693  Vector operator*(const Vector & vec1, const Vector & vec2);
694 
701  Vector operator*(const Vector & vec, double scalar);
702 
709  Vector operator*(double scalar, const Vector & vec);
710 
717  Vector div(const Vector & vec1, const Vector & vec2);
718 
726  Vector div(const Vector & vec, double scalar, bool dir = true);
727 
734  Vector operator/(const Vector & vec1, const Vector & vec2);
735 
742  Vector operator/(const Vector & vec, double scalar);
743 
750  Vector operator/(double scalar, const Vector & vec);
751 
759  double dot_prod(const Vector & vec1, const Vector & vec2);
760 
767  Vector cross_prod(const Vector & vec1, const Vector & vec2);
768 
774  double norm(const Vector & vec);
775 
782  bool zero(const Vector & vec, const Epsilon & eps = Epsilon());
783 
791  string to_str(const Vector & vec, string sep = " ", string delim = "()");
792 
801  Vector make_vec(int n, ...);
802 
809  Vector load(istream & ins, string delim = " ");
810 
819  Table load(istream & ins, int nrow, int ncol, string delim = " ");
820 
827  void save(ostream & outs, const Vector & data, string delim = " ");
828 
835  void save(ostream & outs, const Table & data, string delim = " ");
836 
843  ostream & operator<<(ostream & outs, const Vector & vec);
844 
851  istream & operator>>(istream & ins, Vector & vec);
852 
859  double randf(double low, double high);
860 
868  Vector randf(double low, double high, int n);
869 
876  int randi(int low, int high);
877 
885  Vector randi(int low, int high, int n);
886 
894  bool randp(double p);
895 
900  void randseed();
901 
906  void randseed(unsigned int s);
907 
914  double rnorm(double mu = 0, double sigma = 1);
915 
923  Vector rnorm(int n, double mu = 0, double sigma = 1);
924 
930  double rexp(double theta);
931 
938  Vector rexp(double theta, int n);
939 
945  int rpois(double lmd);
946 
953  Vector rpois(double lmd, int n);
954 
961  int rbinom(int n, double p);
962 
970  Vector rbinom(int n, double p, int count);
971 
978  int rnb(int k, double p);
979 
987  Vector rnb(int k, double p, int count);
988 
996  int rhg(int s, int k, int n);
997 
1006  Vector rhg(int s, int k, int n, int count);
1007 
1014  double prec(double num, int ndec = 4);
1015 
1022  Vector prec(const Vector & vec, int ndec = 4);
1023 
1029  double fac(int n);
1030 
1038  double perm(int m, int n);
1039 
1047  double comb(int m, int n);
1048 
1055  unsigned int gcd(unsigned int a, unsigned int b);
1056 
1063  unsigned int lcm(unsigned int a, unsigned int b);
1064 
1071  template<typename Func>
1072  Vector each(Func func, const Vector & data);
1073 
1080  template<typename Func>
1081  Vector filter(Func func, const Vector & data);
1082 
1091  template<typename Func>
1092  bool probe(Func func, Pair & guess, double factor = 1.6, int ntry = 50);
1093 
1101  template<typename Func>
1102  Pairs scan(Func func, Pair scope, int nr);
1103 
1111  template<typename Func>
1112  double solve(Func func, Pair region, const Epsilon & eps = Epsilon());
1113 
1121  template<typename Func>
1122  double integrate(Func func, Pair region, const Epsilon & eps = Epsilon());
1123 
1130  template<typename T>
1131  Vector a2vec(T data[], int len);
1132 
1133  #include "template_impl.cpp"
1134 }
1135 
1136 #endif