Я бы предложил попробовать какой-нибудь вариант с Ньютоном Рафсоном.
Создайте функцию Diff (k), которая смотрит на разницу в площади между вашими двумя графиками между фиксированными маркерами A и B.
математически, я думаю, это будет целое число (от x = A до B) {f (x) - k * g (x)} dx
в любом случае реально вы могли бы просто вычесть значения,
например, если вы находитесь в диапазоне от X = -10 до 10, и у вас есть точка данных для f (i) и g (i) для каждого целого числа i в [-10, 10] (то есть 21 точка данных)
тогда вы просто суммируете (i = -10 до 10) {f (i) - k * g (i)}
в основном вы ожидаете, что эта функция будет выглядеть как парабола - будет оптимальное k, и небольшое отклонение от нее в любом направлении увеличит общую разность площадей
и чем больше разница, вы ожидаете, чем больше разрыв
Итак, это должна быть довольно плавная функция (если у вас много точек данных)
так что вы хотите минимизировать Diff (k)
, поэтому вы хотите узнать, является ли производная, т.е.
так что просто сделайте Ньютона Рафсона с этой новой функцией D '(k)
Начните с k = 1, и решение должно быть достаточно быстрым
это, вероятно, даст вам оптимальное время вычислений
если вы хотите что-то более простое, просто начните с некоторых k1 и k2, которые находятся по обе стороны от 0
так сказать Diff (1.5) = -3 и Diff (2.9) = 7
так что тогда вы бы выбрали k, скажем, 3/10 пути (10 = 7 - -3) между 1,5 и 2,9
и в зависимости от того, дает ли это положительное или отрицательное значение, используйте его в качестве нового k1 или k2, промойте и повторите