2016-09-24 4 views
1

Я пытаюсь разделить площадь под кривой, приведенной в табличной форме , на равные сегменты области. Я должен решить следующий интеграл и найти множество точек x_0,x_1,...,x_k,x_N, для которых имеет место следующееКак разделить область под кривой на равные отрезки

К сожалению, я не очень понимаю, как это сделать для табличной функции. Для аналитической линейной или квадратичной функции это приводит к решению квадратичного или кубического уравнения для x_k. Я попытался перебрать значение x_k, пока интеграл не станет меньше k/N. Я начинаю с первого фиксированного значения x_0 и пытаюсь найти x_1, для которого интеграл равен k/N, а затем используйте x_1 в качестве нового нижнего предела и ищите x_2 с тем же свойством.
Я предполагаю, что существует гораздо более эффективный способ сделать это, поэтому я решил попросить экспертов здесь. Буду признателен за ваши идеи.

+0

Что вы знаете о f? –

+0

Если вы можете использовать только значения x_k, возможно, не будет иметь эквивариантные сегменты. Есть ли определенные отклонения в этих областях? Допустимо ли интерполировать между значениями x_k? Кроме того, я задаюсь вопросом, будет ли [Математика] (http://math.stackexchange.com/) лучше спросить. –

+0

Я подумывал спросить по математике. Ну, области сегментов должны быть близки к k/N, скажем, 0,01%. –

ответ

2

Нет никакой надежды получить точные правильные ответы, не зная значительно больше о функции f (x). Однако мы могли бы использовать разумное приближение к f (x) и использовать его, поэтому наши ответы также были бы разумными приближениями.

Одно общее приближение, используемое при интеграции, - это правило трапеции, где мы предполагаем, что функция является линейной между последовательными значениями x_i, поэтому площадь между этими значениями является трапецией и легко вычисляется. Итак, сделаем то же приближение для f (x). Предположим, что указанные точки (x [i], f (x [i])), и мы ищем x-координаты z [i].

алгоритм будет затем (в псевдокоде):

Sort the values (x[i], f(x[i])) by the first coordinate 
if any of the neighboring x[i] are equal but the corresponding f(x[i]) are not: 
    raise an error 
Sum the trapezoidal areas to get the total area 
Find the desired area between x-coordinates 
Run through the x[i] and sum individual trapezoid areas 
    When the summed area are greater than the desired area, 
     Use interpolation to find z[i] between the x[i] that give the desired area 

Этого должно быть достаточно ясно. Интерполяция будет квадратичной интерполяцией, которая должна быть достаточно простой.

+0

Благодарим вас за помощь. Я делаю что-то очень похожее. Я вычисляю cdf и сравниваю с k/N. Он просто тестировался также с помощью процедуры выборки, и я смог получить точные результаты. –

2

От ваших комментариев, f известен как неотрицательный. Кроме того, приведенные примеры имеют ограниченные непрерывные производные.

Допустим, вы первый пластинчатый вашу функцию на п точек (п будет определено позже), и г является совокупным приближение интеграла е по trapezoidal rule. Поскольку f неотрицателен, g монотонно неуклонно убывает. Следовательно, вы можете найти ближайший х точку ближе всего к значению г макс с помощью binary search, со сложностью Θ (журнал (п)). Фактически, вы можете просто сделать это k раз.

Отметьте, что ваше требуемое приближение находится на g, не на x. Изготовление n достаточно велико, однако, хорошее приближение на x является хорошим для g. Чтобы определить n, вы можете использовать known bounds on the error of the trapezoidal formula.