Advertisement
Guest User

Untitled

a guest
Feb 26th, 2013
1,402
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.86 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3.  
  4. class Derivable {
  5.         double val, deriv;
  6.  
  7.     public:
  8.         Derivable(double _val, double _deriv) : val(_val), deriv(_deriv) {}
  9.     Derivable(double c): val(c), deriv(0) {}
  10.     static Derivable IndependendVariable(double x) { return Derivable(x,1); }
  11.  
  12.     double getValue() const {return val;}
  13.     double getDerivative() const {return deriv;}
  14.  
  15.     friend Derivable operator+(const Derivable& f1, const Derivable& f2);
  16.     friend Derivable operator-(const Derivable& f1, const Derivable& f2);
  17.     friend Derivable operator*(const Derivable& f1, const Derivable& f2);
  18.     friend Derivable operator/(const Derivable& f1, const Derivable& f2);
  19.     friend Derivable cos(Derivable f);
  20. };
  21.  
  22. Derivable operator+(const Derivable& f1, const Derivable& f2) {
  23.     return Derivable(f1.val + f2.val, f1.deriv + f2.deriv);
  24. }
  25.  
  26. Derivable operator-(const Derivable& f1, const Derivable& f2) {
  27.     return Derivable(f1.val - f2.val, f1.deriv - f2.deriv);
  28. }
  29.  
  30. Derivable operator*(const Derivable& f1, const Derivable& f2) {
  31.     return Derivable(f1.val * f2.val, f1.deriv * f2.val + f1.val * f2.deriv);
  32. }
  33.  
  34. Derivable operator/(const Derivable& f1, const Derivable& f2) {
  35.     return Derivable(f1.val / f2.val, (f1.deriv * f2.val - f1.val * f2.deriv) / f2.val / f2.val);
  36. }
  37.  
  38. Derivable cos(Derivable f) {
  39.     return Derivable(cos(f.val), -sin(f.val)*f.deriv);
  40. }
  41.  
  42. //--------------------------------------
  43.  
  44. Derivable f(double x, double a) {
  45.     Derivable xd = Derivable::IndependendVariable(x);
  46.     return a*xd*xd*xd - cos(xd/2);
  47. }
  48.  
  49. int main() {
  50.     static const double EPS = 1e-5;
  51.     double x = 1;
  52.     double a;
  53.     std::cin >> a;
  54.     while (1) {
  55.         Derivable thisF = f(x, a);
  56.         if (fabs(thisF.getValue()) < EPS) break;
  57.         x = x - thisF.getValue() / thisF.getDerivative();
  58.     std::cout << x << std::endl;
  59.     }
  60.     std::cout << x << std::endl;
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement