}
function
getMaxDerivativeByFormulaAndXDATAS(
$formula
,
$x_datas
, &
$matchs
){
$derivatives
=
array
();
$max_derivative
= 0;
foreach
(
$x_datas
as
$x_data
) {
$derivative
= getDerivativeByFormulaAndXDATA(
$formula
,
$x_data
);
$derivatives
[
$x_data
] =
$derivative
;
$max_derivative
=
$max_derivative
>=
abs
(
$derivative
)?
$max_derivative
:
abs
(
$derivative
);
//printf("x=%f, derivative=%f \n",$x_data, $derivative);
}
$matchs
=
array
();
foreach
(
$derivatives
as
$x_data
=>
$derivative
) {
if
(
abs
(
$derivative
) ==
$max_derivative
){
$matchs
[] =
$x_data
;
}
}
printf("max derivative=%f\n",
$max_derivative
);
foreach
(
$matchs
as
$x_match
) {
printf(" derivative=%f when x=%f\n",
$derivatives
[
$x_match
],
$x_match
);
}
}
//notice the format of formula: ax^b if b=0 could omit except coefficient a, if a=1 could omit
coefficient
$formula
= "x^2+2x^1+1";
"The formula is $formula \n";
//printf("Derivative of 2 is %f \n",getDerivativeByFormulaAndXDATA($formula, 3.2));
//print getValueByFormulaAndXDATA($formula, 3.2)."\n";
$sampleData
=
array
(-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,1,2,3,4,5,6,7,8,9,10,11,12);
foreach
(
$sampleData
as
$x_data
) {
$str
.=
$x_data
.", ";
}
"sample x values: $str \n";
getMaxDerivativeByFormulaAndXDATAS(
$formula
,
$sampleData
,
$matchs
)."\n";
?>
the output will be:
sample x values: -12, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
max derivative=26.000000
derivative=26.000000 when x=12.000000