Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- #define INF 1000010000
- #define nl '\n'
- #define pb push_back
- #define ppb pop_back
- #define mp make_pair
- #define fi first
- #define se second
- #define pii pair<int,int>
- #define pdd pair<double,double>
- #define all(c) (c).begin(), (c).end()
- #define SORT(c) sort(all(c))
- #define sz(c) (c).size()
- #define rep(i,n) for( int i = 0; i < n; ++i )
- #define repi(i,n) for( int i = 1 ; i <= n; ++i )
- #define repn(i,n) for( int i = n - 1 ; i >= 0 ; --i )
- #define repf(j,i,n) for( int j = i ; j < n ; ++j )
- #define die(s) {std::cout << s << nl;}
- #define dier(s) {std::cout << s; return 0;}
- #define vi vector<int>
- typedef long long ll;
- #define eps 1e-8
- #define M_E 2.71828182845904523536
- using namespace std;
- vi pows = {11 , 0 , 0 , 5 , -7 , 1};
- double k_exp = -1.;
- double k_pow_exp = -1.;
- // y = x^5-7x^4+5x^3+11-e^(-x)
- // y' = 5x^4-28x^3+15x^2+e^(-x)
- //plot https://i.gyazo.com/26c1d22f6ba983c17251fb73a9b56082.png
- //solutions https://i.gyazo.com/232259e4f577671ffbaaf72e625ab487.png
- inline double f(double x){
- double res = 0;
- double tmp = 1;
- rep(i , sz(pows)){
- res += tmp * (double)pows[i];
- tmp *= x;
- }
- res += k_exp * pow(M_E , k_pow_exp * x);
- return res;
- }
- inline double dfdx(double x){
- double res = 0;
- double tmp = 1;
- rep(i , sz(pows) - 1){
- res += tmp * (i + 1) * (double)pows[i + 1];
- tmp *= x;
- }
- res += k_exp * k_pow_exp * pow(M_E , k_pow_exp * x);
- return res;
- }
- inline void solve1(){
- double l = -1000.;
- double r = 1000.;
- int i = 0;
- do{
- ++i;
- double mb = 0.5 * (l + r);
- if(abs(f(mb)) < eps){
- cout << "x: " << mb << " f(x):" << f(mb)<< " iteration:" << i << nl;
- return;
- }
- if(f(l) * f(mb) < 0)r = mb;
- else l = mb;
- }while(abs(l - r) > eps);
- cout << "x: " << l << " f(x):" << f(l)<< " iteration:" << i << nl;
- }
- inline void solve2(){
- double x = 1.;
- double t = x - f(x)/dfdx(x);
- int i = 0;
- do{
- x = t;
- t = t - f(t)/dfdx(t);
- ++i;
- }while(abs(t - x) > eps);
- cout << "x: " << t << " f(x):" << f(t)<< " iteration:" << i << nl;
- }
- inline void solve3(){
- double x = 10.;
- double a = 0.0002;//1 /(2 * dfdx(x));
- double t = x - f(x)/dfdx(x);
- int i = 0;
- do{
- t = x;
- x = x - a * f(x);
- ++i;
- }while(abs(t - x) > eps);
- cout << "x: " << x << " f(x):" << f(x)<< " iteration:" << i << nl;
- }
- int main() {
- // ios_base::sync_with_stdio(false);
- cin.tie(NULL);
- cout.precision(10);
- cout.setf(ios::fixed);
- solve1();
- solve2();
- solve3();
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement