Advertisement
osipyonok

4MO Lab1_

Dec 14th, 2016
200
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.48 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2.  
  3. #define INF 1000010000
  4. #define nl '\n'
  5. #define pb push_back
  6. #define ppb pop_back
  7. #define mp make_pair
  8. #define fi first
  9. #define se second
  10. #define pii pair<int,int>
  11. #define pdd pair<double,double>
  12. #define all(c) (c).begin(), (c).end()
  13. #define SORT(c) sort(all(c))
  14. #define sz(c) (c).size()
  15. #define rep(i,n) for( int i = 0; i < n; ++i )
  16. #define repi(i,n) for( int i = 1 ; i <= n; ++i )
  17. #define repn(i,n) for( int i = n - 1 ; i >= 0 ; --i )
  18. #define repf(j,i,n) for( int j = i ; j < n ; ++j )
  19. #define die(s) {std::cout << s << nl;}
  20. #define dier(s) {std::cout << s; return 0;}
  21. #define vi vector<int>
  22. typedef long long ll;
  23.  
  24. #define eps 1e-8
  25. #define M_E 2.71828182845904523536
  26.  
  27. using namespace std;
  28. vi pows = {11 , 0 , 0 , 5 , -7 , 1};
  29. double k_exp = -1.;
  30. double k_pow_exp = -1.;
  31. // y = x^5-7x^4+5x^3+11-e^(-x)
  32. // y' = 5x^4-28x^3+15x^2+e^(-x)
  33. //plot https://i.gyazo.com/26c1d22f6ba983c17251fb73a9b56082.png
  34. //solutions https://i.gyazo.com/232259e4f577671ffbaaf72e625ab487.png
  35.  
  36. inline double f(double x){
  37.     double res = 0;
  38.     double tmp = 1;
  39.     rep(i , sz(pows)){
  40.         res += tmp * (double)pows[i];
  41.         tmp *= x;
  42.     }
  43.     res += k_exp * pow(M_E , k_pow_exp * x);
  44.     return res;
  45. }
  46.  
  47. inline double dfdx(double x){
  48.     double res = 0;
  49.     double tmp = 1;
  50.     rep(i , sz(pows) - 1){
  51.         res += tmp * (i + 1) * (double)pows[i + 1];
  52.         tmp *= x;
  53.     }
  54.     res += k_exp * k_pow_exp * pow(M_E , k_pow_exp * x);
  55.     return res;
  56. }
  57.  
  58. inline void solve1(){
  59.     double l = -1000.;
  60.     double r = 1000.;
  61.     int i = 0;
  62.     do{
  63.         ++i;
  64.         double mb = 0.5 * (l + r);
  65.         if(abs(f(mb)) < eps){
  66.             cout << "x: " << mb << " f(x):" << f(mb)<< " iteration:" << i << nl;
  67.             return;
  68.         }
  69.         if(f(l) * f(mb) < 0)r = mb;
  70.         else l = mb;
  71.     }while(abs(l - r) > eps);
  72.     cout << "x: " << l << " f(x):" << f(l)<< " iteration:" << i << nl;
  73. }
  74.  
  75. inline void solve2(){
  76.     double x = 1.;
  77.     double t = x - f(x)/dfdx(x);
  78.     int i = 0;
  79.     do{
  80.         x = t;
  81.         t = t - f(t)/dfdx(t);
  82.         ++i;
  83.     }while(abs(t - x) > eps);
  84.     cout << "x: " << t << " f(x):" << f(t)<< " iteration:" << i << nl;
  85. }
  86.  
  87.  
  88. inline void solve3(){
  89.     double x = 10.;
  90.     double a = 0.0002;//1 /(2 * dfdx(x));
  91.     double t = x - f(x)/dfdx(x);
  92.     int i = 0;
  93.     do{
  94.         t = x;
  95.         x = x - a * f(x);
  96.         ++i;
  97.     }while(abs(t - x) > eps);
  98.     cout << "x: " << x << " f(x):" << f(x)<< " iteration:" << i << nl;
  99. }
  100.  
  101. int main() {
  102. //  ios_base::sync_with_stdio(false);
  103.     cin.tie(NULL);
  104.     cout.precision(10);
  105.     cout.setf(ios::fixed);
  106.  
  107.     solve1();
  108.     solve2();
  109.     solve3();
  110.     system("pause");
  111.     return 0;
  112. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement