mathkit  1.5
 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  };
91 
95  struct LineParam {
99  double slope;
100 
104  double intercept;
105  };
106 
114  double pv(double amount, double rate, double period);
115 
123  double fv(double amount, double rate, double period);
124 
131  double pv_coef(double rate, double period);
132 
139  double fv_coef(double rate, double period);
140 
149  double apv(double annuity, double rate, int period, bool prepaid = false);
150 
159  double afv(double annuity, double rate, int period, bool prepaid = false);
160 
168  double apv_coef(double rate, int period, bool prepaid = false);
169 
177  double afv_coef(double rate, int period, bool prepaid = false);
178 
187  double spv(const Vector & amount, double rate, bool prepaid = false);
188 
196  double sfv(const Vector & amount, double rate, bool prepaid = false);
197 
206  double comp_rate(double pval, double fval, double period);
207 
213  double mean(const Vector & data);
214 
221  double median(const Vector & data, bool sorted = false);
222 
230  double var(const Vector & data, bool sample = true);
231 
239  double sd(const Vector & data, bool sample = true);
240 
249  double cov(const Vector & data1, const Vector & data2, bool sample = true);
250 
257  double cor(const Vector & data1, const Vector & data2);
258 
266  double moment(const Vector & data, int k, bool central = true);
267 
273  double skew(const Vector & data);
274 
281  double kurt(const Vector & data, bool excess = true);
282 
290  double dnorm(double x, double mu = 0, double sigma = 1);
291 
300  double pnorm(double x, double mu = 0, double sigma = 1, const Epsilon & eps = Epsilon());
301 
310  double qnorm(double p, double mu = 0, double sigma = 1, const Epsilon & eps = Epsilon());
311 
318  double dt(double x, int n);
319 
327  double pt(double x, int n, const Epsilon & eps = Epsilon());
328 
336  double qt(double p, int n, const Epsilon & eps = Epsilon());
337 
345  double pois(double lmd, int k, bool cum = false);
346 
355  double binom(int n, double p, int k, bool cum = false);
356 
363  double expo(double theta, double x);
364 
370  double gamma(double x);
371 
379  LineParam linregress(const Vector & xdata, const Vector & ydata);
380 
388  Vector seq(double from, double to, double step = 1);
389 
397  Vector linspace(double start, double end, int count = 100);
398 
404  double max(const Vector & data);
405 
411  double min(const Vector & data);
412 
418  double sum(const Vector & data);
419 
425  double prod(const Vector & data);
426 
433  Vector add(const Vector & vec1, const Vector & vec2);
434 
442  Vector add(const Vector & vec, double scalar);
443 
450  Vector operator+(const Vector & vec1, const Vector & vec2);
451 
459  Vector operator+(const Vector & vec, double scalar);
460 
468  Vector operator+(double scalar, const Vector & vec);
469 
476  Vector sub(const Vector & vec1, const Vector & vec2);
477 
486  Vector sub(const Vector & vec, double scalar, bool dir = true);
487 
494  Vector operator-(const Vector & vec1, const Vector & vec2);
495 
503  Vector operator-(const Vector & vec, double scalar);
504 
512  Vector operator-(double scalar, const Vector & vec);
513 
520  Vector mul(const Vector & vec1, const Vector & vec2);
521 
528  Vector mul(const Vector & vec, double scalar);
529 
536  Vector operator*(const Vector & vec1, const Vector & vec2);
537 
544  Vector operator*(const Vector & vec, double scalar);
545 
552  Vector operator*(double scalar, const Vector & vec);
553 
560  Vector div(const Vector & vec1, const Vector & vec2);
561 
569  Vector div(const Vector & vec, double scalar, bool dir = true);
570 
577  Vector operator/(const Vector & vec1, const Vector & vec2);
578 
585  Vector operator/(const Vector & vec, double scalar);
586 
593  Vector operator/(double scalar, const Vector & vec);
594 
602  double dot_prod(const Vector & vec1, const Vector & vec2);
603 
610  Vector cross_prod(const Vector & vec1, const Vector & vec2);
611 
617  double norm(const Vector & vec);
618 
626  string to_str(const Vector & vec, string sep = " ", string delim = "()");
627 
636  Vector make_vec(int n, ...);
637 
644  Vector load(istream & ins, string delim = " ");
645 
654  Table load(istream & ins, int nrow, int ncol, string delim = " ");
655 
662  void save(ostream & outs, const Vector & data, string delim = " ");
663 
670  void save(ostream & outs, const Table & data, string delim = " ");
671 
678  ostream & operator<<(ostream & outs, const Vector & vec);
679 
686  istream & operator>>(istream & ins, Vector & vec);
687 
694  double randf(double low, double high);
695 
703  Vector randf(double low, double high, int n);
704 
711  int randi(int low, int high);
712 
720  Vector randi(int low, int high, int n);
721 
729  bool randp(double p);
730 
735  void randseed();
736 
741  void randseed(unsigned int s);
742 
749  double rnorm(double mu = 0, double sigma = 1);
750 
758  Vector rnorm(int n, double mu = 0, double sigma = 1);
759 
765  int rpois(double lmd);
766 
773  Vector rpois(double lmd, int n);
774 
781  int rbinom(int n, double p);
782 
790  Vector rbinom(int n, double p, int count);
791 
797  double rexp(double theta);
798 
805  Vector rexp(double theta, int n);
806 
813  double prec(double num, int ndec = 2);
814 
821  Vector prec(const Vector & vec, int ndec = 4);
822 
828  double fac(unsigned int n);
829 
837  double perm(unsigned int m, unsigned int n);
838 
846  double comb(unsigned int m, unsigned int n);
847 
854  unsigned int gcd(unsigned int a, unsigned int b);
855 
862  unsigned int lcm(unsigned int a, unsigned int b);
863 
870  template<typename Func>
871  Vector each(Func func, const Vector & data);
872 
879  template<typename Func>
880  Vector filter(Func func, const Vector & data);
881 
890  template<typename Func>
891  bool probe(Func func, Pair & guess, double factor = 1.6, int ntry = 50);
892 
900  template<typename Func>
901  Pairs scan(Func func, Pair scope, int nr);
902 
910  template<typename Func>
911  double solve(Func func, Pair region, const Epsilon & eps = Epsilon());
912 
920  template<typename Func>
921  double integrate(Func func, Pair region, const Epsilon & eps = Epsilon());
922 
929  template<typename T>
930  Vector a2vec(T data[], int len);
931 
932  #include "template_impl.cpp"
933 }
934 
935 #endif