double f(double x) {
   return  1.1642155346721916e-002
        +  6.9861038303686449e+000 * pow(x,1)
        + -3.6816113889644328e+001 * pow(x,2)
        +  1.2881710302939246e+002 * pow(x,3)
        + -2.7719175203710529e+002 * pow(x,4)
        +  3.6909927101343055e+002 * pow(x,5)
        + -3.0322468151631256e+002 * pow(x,6)
        +  1.4576730307357047e+002 * pow(x,7)
        + -3.3603481299747273e+001 * pow(x,8)
        +  5.8458199985534520e-001 * pow(x,9)
        + -8.3925530529757708e-002 * pow(x,10)
        +  9.2857746616141235e-001 * pow(x,11)
        + -2.8519133874323455e-001 * pow(x,12)
        +  2.6977117199022960e-003 * pow(x,13)
        +  1.1027601781731788e-002 * pow(x,14)
        + -3.2268176611719435e-003 * pow(x,15)
        + -1.3977041577367677e-004 * pow(x,16)
        +  6.0128518777268630e-004 * pow(x,17)
        + -9.9816248641247830e-005 * pow(x,18)
        + -4.0993976543320294e-005 * pow(x,19)
        +  1.4129024071024999e-005 * pow(x,20)
        + -1.1934188685144327e-006 * pow(x,21);
}

// regex find: (\+ )(.*pow\(x,)([0-9]*)
// regex replace: $1$3 * $2$3-1
double f_first_derv(double x) {
   return 6.9861038303686449e+000
        + 2 * -3.6816113889644328e+001 * pow(x,2-1)
        + 3 *  1.2881710302939246e+002 * pow(x,3-1)
        + 4 * -2.7719175203710529e+002 * pow(x,4-1)
        + 5 *  3.6909927101343055e+002 * pow(x,5-1)
        + 6 * -3.0322468151631256e+002 * pow(x,6-1)
        + 7 *  1.4576730307357047e+002 * pow(x,7-1)
        + 8 * -3.3603481299747273e+001 * pow(x,8-1)
        + 9 *  5.8458199985534520e-001 * pow(x,9-1)
        + 10 * -8.3925530529757708e-002 * pow(x,10-1)
        + 11 *  9.2857746616141235e-001 * pow(x,11-1)
        + 12 * -2.8519133874323455e-001 * pow(x,12-1)
        + 13 *  2.6977117199022960e-003 * pow(x,13-1)
        + 14 *  1.1027601781731788e-002 * pow(x,14-1)
        + 15 * -3.2268176611719435e-003 * pow(x,15-1)
        + 16 * -1.3977041577367677e-004 * pow(x,16-1)
        + 17 *  6.0128518777268630e-004 * pow(x,17-1)
        + 18 * -9.9816248641247830e-005 * pow(x,18-1)
        + 19 * -4.0993976543320294e-005 * pow(x,19-1)
        + 20 *  1.4129024071024999e-005 * pow(x,20-1)
        + 21 * -1.1934188685144327e-006 * pow(x,21-1);
}

double f_second_derv(double x) {
   return 2 * -3.6816113889644328e+001
        + (3 - 1) * 3 *  1.2881710302939246e+002 * pow(x,3-1-1)
        + (4 - 1) * 4 * -2.7719175203710529e+002 * pow(x,4-1-1)
        + (5 - 1) * 5 *  3.6909927101343055e+002 * pow(x,5-1-1)
        + (6 - 1) * 6 * -3.0322468151631256e+002 * pow(x,6-1-1)
        + (7 - 1) * 7 *  1.4576730307357047e+002 * pow(x,7-1-1)
        + (8 - 1) * 8 * -3.3603481299747273e+001 * pow(x,8-1-1)
        + (9 - 1) * 9 *  5.8458199985534520e-001 * pow(x,9-1-1)
        + (10 - 1) * 10 * -8.3925530529757708e-002 * pow(x,10-1-1)
        + (11 - 1) * 11 *  9.2857746616141235e-001 * pow(x,11-1-1)
        + (12 - 1) * 12 * -2.8519133874323455e-001 * pow(x,12-1-1)
        + (13 - 1) * 13 *  2.6977117199022960e-003 * pow(x,13-1-1)
        + (14 - 1) * 14 *  1.1027601781731788e-002 * pow(x,14-1-1)
        + (15 - 1) * 15 * -3.2268176611719435e-003 * pow(x,15-1-1)
        + (16 - 1) * 16 * -1.3977041577367677e-004 * pow(x,16-1-1)
        + (17 - 1) * 17 *  6.0128518777268630e-004 * pow(x,17-1-1)
        + (18 - 1) * 18 * -9.9816248641247830e-005 * pow(x,18-1-1)
        + (19 - 1) * 19 * -4.0993976543320294e-005 * pow(x,19-1-1)
        + (20 - 1) * 20 *  1.4129024071024999e-005 * pow(x,20-1-1)
        + (21 - 1) * 21 * -1.1934188685144327e-006 * pow(x,21-1-1);
}


double Functions::f_third_derv(double x) {
	return (3 - 1) * 3 * 1.2881710302939246e+002
		+ (4 - 2) * (4 - 1) * 4 * -2.7719175203710529e+002 * pow(x, 4-1 - 1 - 1)
		+ (5 - 2) * (5 - 1) * 5 * 3.6909927101343055e+002 * pow(x, 5-1 - 1 - 1)
		+ (6 - 2) * (6 - 1) * 6 * -3.0322468151631256e+002 * pow(x, 6-1 - 1 - 1)
		+ (7 - 2) * (7 - 1) * 7 * 1.4576730307357047e+002 * pow(x, 7-1 - 1 - 1)
		+ (8 - 2) * (8 - 1) * 8 * -3.3603481299747273e+001 * pow(x, 8-1 - 1 - 1)
		+ (9 - 2) * (9 - 1) * 9 * 5.8458199985534520e-001 * pow(x, 9-1 - 1 - 1)
		+ (10 - 2) * (10 - 1) * 10 * -8.3925530529757708e-002 * pow(x, 10-1 - 1 - 1)
		+ (11 - 2) * (11 - 1) * 11 * 9.2857746616141235e-001 * pow(x, 11-1 - 1 - 1)
		+ (12 - 2) * (12 - 1) * 12 * -2.8519133874323455e-001 * pow(x, 12-1 - 1 - 1)
		+ (13 - 2) * (13 - 1) * 13 * 2.6977117199022960e-003 * pow(x, 13-1 - 1 - 1)
		+ (14 - 2) * (14 - 1) * 14 * 1.1027601781731788e-002 * pow(x, 14-1 - 1 - 1)
		+ (15 - 2) * (15 - 1) * 15 * -3.2268176611719435e-003 * pow(x, 15-1 - 1 - 1)
		+ (16 - 2) * (16 - 1) * 16 * -1.3977041577367677e-004 * pow(x, 16-1 - 1 - 1)
		+ (17 - 2) * (17 - 1) * 17 * 6.0128518777268630e-004 * pow(x, 17-1 - 1 - 1)
		+ (18 - 2) * (18 - 1) * 18 * -9.9816248641247830e-005 * pow(x, 18-1 - 1 - 1)
		+ (19 - 2) * (19 - 1) * 19 * -4.0993976543320294e-005 * pow(x, 19-1 - 1 - 1)
		+ (20 - 2) * (20 - 1) * 20 * 1.4129024071024999e-005 * pow(x, 20-1 - 1 - 1)
		+ (21 - 2) * (21 - 1) * 21 * -1.1934188685144327e-006 * pow(x, 21-1 - 1 - 1);
}