n, y_n (up/down): 0 0.0953101798043249 0.0953101798043249 n, y_n (up/down): 1 0.0468982019567507 0.0468982019567507 n, y_n (up/down): 2 0.0310179804324928 0.0310179804324928 n, y_n (up/down): 3 0.0231535290083968 0.0231535290084016 n, y_n (up/down): 4 0.0184647099159747 0.0184647099160125 n, y_n (up/down): 5 0.0153529008402984 0.0153529008389668 n, y_n (up/down): 6 0.0131376582721714 0.0131376582624891 n, y_n (up/down): 7 0.0114805602934212 0.0114805602325932 n, y_n (up/down): 8 0.0101943966001272 0.0101943983716508 n, y_n (up/down): 9 0.0091671049594879 0.0091671236256787 n, y_n (up/down): 10 0.0083286762237549 0.0083287335918189 n, y_n (up/down): 11 0.0076236724853516 0.0076222290336939 n, y_n (up/down): 12 0.0071258544921875 0.0071148651228605 n, y_n (up/down): 13 0.0057373046875000 0.0057442655768129 n, y_n (up/down): 14 0.0156250000000000 0.0142329159691716 n, y_n (up/down): 15 -0.0937500000000000 -0.0717638696291832 n, y_n (up/down): 16 0.8750000000000000 0.7797726530809349 n, y_n (up/down): 17 -6.0000000000000000 -7.9918313757219790 n, y_n (up/down): 18 80.0000000000000000 67.9816784898641800 n, y_n (up/down): 19 -512.0000000000000000 -807.3893324901815000 n, y_n (up/down): 20 4096.0000000000000000 6540.9419220573470000
n forward recursion 0 0.0953101798043249 1 0.0468982019567507 2 0.0310179804324935 3 0.0231535290083985 4 0.0184647099160155 5 0.0153529008398455 6 0.0131376582682119 7 0.0114805601750236 8 0.0101943982497636 9 0.0091671286134746 10 0.0083287138652537 11 0.0076219522565537 12 0.0071138107677960 13 0.0057849692451174 14 0.0135788789773972 15 -0.0691221231073049 16 0.7537212310730486 17 -7.4783887813187210 18 74.8394433687427600 19 -748.3418021084802000 20 7483.4680210848010000
small perturbation
consider time evolution of two closed-by trajetories:
$\ y_n,\ \tilde y_n \qquad y_n-\tilde y_n=\epsilon_n\ll 1$
dynamical system theory
dynamical systems with positive (negative) Lyapunov
exponents
are denoted chaotic (regular)
n forward recursion backward recursion 0 0.0953101798043249 0.0953101798043249 1 0.0468982019567507 0.0468982019567514 2 0.0310179804324935 0.0310179804324860 3 0.0231535290083985 0.0231535290084733 4 0.0184647099160155 0.0184647099152671 5 0.0153529008398455 0.0153529008473289 6 0.0131376582682119 0.0131376581933773 7 0.0114805601750236 0.0114805609233700 8 0.0101943982497636 0.0101943907661000 9 0.0091671286134746 0.0091672034481114 10 0.0083287138652537 0.0083279655188863 11 0.0076219522565537 0.0076294357202278 12 0.0071138107677960 0.0070389761310555 13 0.0057849692451174 0.0065333156125223 14 0.0135788789773972 0.0060954153033482 15 -0.0691221231073049 0.0057125136331850 16 0.7537212310730486 0.0053748636681501 17 -7.4783887813187210 0.0050748927302638 18 74.8394433687427600 0.0048066282529171 19 -748.3418021084802000 0.0045652964181972
#include <iostream> #include <stdio.h> // for printf #include <math.h> // for pow using namespace std; // y_n = \int_0^1 dx x^n/(x+a) // --- // --- Straight summing up of integrated terms // --- double performSumUp(int N, double a) { double result = pow(-a,1.0*N)*log((1+a)/a); for (int i=0; i<N; i++) result += pow(-a,1.0*i)/(N-i); return result; } // end of summationUP // --- // --- Straight summing down of integrated terms // --- double performSumDown(int N, double a) { double result = pow(-a,1.0*N)*log((1+a)/a); for (int i=N-1; i>=0; i--) result += pow(-a,1.0*i)/(N-i); return result; } // end of summationDown // --- // --- Solving the forward recursion // --- double forwardRecursion(int N, double a) { double result = log((1+a)/a); for (int i=1; i<=N; i++) result = -a*result + 1.0/i; return result; } // end of forwardRecursion // --- // --- Solving the backward recursion // --- double backwardRecursion(int N, double a) { int startN = 50; double result = 0.0; for (int i=startN; i>N; i--) result = (1.0/i-result)/a; return result; } // end of forwardRecursion // --- // --- main // --- int main() { int maxN = 21; double a = 10.0; printf("\na = %6.1f\n\n",a); // *** ****************** *** // *** summation of terms *** // *** ****************** *** for (int n=0; n<maxN; n+=2) { double resultSumUp = performSumUp(n,a); double resultSumDown = performSumDown(n,a); printf("n, y_n (up/down): %3d %22.16f %22.16f\n", n,resultSumUp,resultSumDown); } printf("\n"); // *** ****************** *** // *** recursion relation *** // *** ****************** *** printf("%3s %22s %22s\n","n","forward recursion","backward recursion"); for (int n=0; n<maxN; n+=2) { double resultForward = forwardRecursion(n,a); double resultBackward = backwardRecursion(n,a); printf("%3d %22.16f %22.16f\n", n,resultForward,resultBackward); } // return 1; }
gnuplot
/* compile with g++ -Wall -O3 -o roots.e roots.c -O3 : optimization -Wall : all Warnings */ #include <iostream> // input/output handling #include <stdio.h> // for formatted input/output #include <stdlib.h> // srand, rand, exit #include <cmath> // for log using namespace std; const int nRoots = 30000000; // number of roots of polynomial const int maxIter = 10000; // maximal number of bisections const double accuracy = 1.0E-12; // desired accuracy // --- // --- a polynomial function function // --- double polynomial(double x) { double result = 1.0; for (int iRoots=0; iRoots<nRoots; iRoots++) result = result*(x-iRoots); return result; } // --- // --- start of main // --- int main() { srand(time(NULL)); // random number initialization double xLower = nRoots*(rand()/(double)RAND_MAX); double xUpper = xLower + 1.0; double xMean = 0.5*(xUpper+xLower); double absError = xUpper-xLower; // printf("# starting xLower/xUpper: %10.6f %10.6f\n", xLower, xUpper); // double fLower, fUpper, fMean; int nIter = 0; while ( (absError>accuracy*nRoots)&&(nIter<maxIter) ) { nIter++; fLower = polynomial(xLower); fUpper = polynomial(xUpper); fMean = polynomial(xMean); // if ( fLower*fUpper > 1.0 ) { printf(" ! error, no bisection possible %10.6f %10.6f \n",xLower, xUpper); exit(EXIT_FAILURE); // abort program } // if ( fMean*fUpper > 0.0 ) xUpper = xMean; else xLower = xMean; // xMean = 0.5*(xUpper+xLower); absError = xUpper-xLower; // printf("%7d %24.12f %16.12f %20.16f \n", nIter, xMean, absError, absError/xMean); } }