Какая производная? Функция недифференцируема в точках изгиба, а в других точках производная — константа.
Функцию придется выполнить n раз, гарантировано быстрее не получится. Раскрывать «заранее» модули — это тоже не выход — мы же меняем каждый раз к, и само значение модуля будет меняться. Если нужно ускорить процесс, можно задуматься о параллельных потоках, но тут могут вылезти очень большие накладные расходы на создание и поддержание потоков.
Если отсортировать по возрастанию bi/ai, возможно можно будет вычислять не n раз а меньше, т.к. как только сумма начнёт опять возрастать уже можно будет не считать. Но это надо еще математически показать.
Я недавно читал, что именно такую схему применяют для изменения баланса в WOT. К сожалению ссылки не нашел сходу, но смысл именно такой — накапливаем статистику по выживанию юнита в бою/исхода боя. Смотрим перекосы, и ослабляем «слишком сильные» классы, и усиливаем «слабые». При этом можно учитывать роль юнита (танк, ДД, хил/ светляк, проддержка, тяж).