Si j'ai bien compris, l'approche naïve est simple.
Prenons le calcul de C. Il te suffit de choisir un pas (plus le pas est petit, plus le résultat est juste, mais plus le temps de calcul est élevé). Ensuite il te suffit d'une simple boucle (for) dans laquelle tu calcules f(x) pour a, a+pas, a+pas+pas, ..., b. Si la valeur de f(x) est plus petite que la valeur précédemment enregistrée, tu sauvegardes f(x). A la fin de la boucle tu as la valeur minimale. C'est pareil pour D.
Après si les performances sont vraiment importantes, il y a probablement un algorithme plus efficace (heuristique?), mais ça dépend de l'utilité du bouzin (pas envie de chercher )