You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

node.h 2.6 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. #ifndef NODE_H
  2. #define NODE_H
  3. #include <cmath>
  4. #include <iostream>
  5. #include "graph.h"
  6. #include "mor.h"
  7. #include "dor.h"
  8. #include "por.h"
  9. class Node {
  10. private:
  11. double value;
  12. long int uid;
  13. double gradient_recursive(Graph* graph, const long int& current_uid, const long int& stop_uid) const;
  14. public:
  15. Node(const double& value=0);
  16. Node(const Node& node);
  17. static Node monadic_operation(const Node& n, MonadicOperationResult (*)(const double&));
  18. static Node dyadic_operation(const Node& l, const Node& r, DyadicOperationResult (*)(const double&, const double&));
  19. static Node polyadic_operation(const std::vector<Node>& nodes, PolyadicOperationResult (*)(const std::vector<double>&));
  20. double gradient(const Node& node) const;
  21. std::vector<double> gradient(const std::vector<Node>& nodes) const;
  22. std::vector<std::vector<double> > gradient(const std::vector<std::vector<Node> >& nodes) const;
  23. friend Node operator+(const Node& l, const Node& r);
  24. friend Node operator-(const Node& l, const Node& r);
  25. friend Node operator*(const Node& l, const Node& r);
  26. friend Node operator/(const Node& l, const Node& r);
  27. Node& operator+=(const Node& r);
  28. Node& operator-=(const Node& r);
  29. Node& operator*=(const Node& r);
  30. Node& operator/=(const Node& r);
  31. friend bool operator==(const Node& l, const Node& r);
  32. friend bool operator<(const Node& l, const Node& r);
  33. friend bool operator>(const Node& l, const Node& r);
  34. friend bool operator<=(const Node& l, const Node& r);
  35. friend bool operator>=(const Node& l, const Node& r);
  36. friend Node sin(const Node& x);
  37. friend Node cos(const Node& x);
  38. friend Node tan(const Node& x);
  39. friend Node sinh(const Node& x);
  40. friend Node cosh(const Node& x);
  41. friend Node tanh(const Node& x);
  42. friend Node asin(const Node& x);
  43. friend Node acos(const Node& x);
  44. friend Node atan(const Node& x);
  45. friend Node log(const Node& x, const Node& base);
  46. friend Node log10(const Node& x);
  47. friend Node ln(const Node& x);
  48. friend Node pow(const Node& x, const Node& p);
  49. friend Node exp(const Node& x);
  50. friend Node sqrt(const Node& x);
  51. friend Node abs(const Node& x);
  52. friend Node min(const Node& l, const Node& r);
  53. friend Node max(const Node& l, const Node& r);
  54. friend std::ostream& operator<<(std::ostream& os, const Node& node);
  55. };
  56. #endif /* end of include guard: NODE_H */

Edge : 一个开源的科学计算引擎

Contributors (1)