Я работаю с функциями, которые, в общем, гораздо более плавные и лучше ведут себя в пространстве журналов регистрации - так что именно здесь я выполняю интерполяцию / экстраполяцию и т. Д., И это работает очень хорошо. Есть ли способ интегрировать эти числовые функции в пространстве журнала?
т.е. я надеюсь использовать какое-то простое трапециевидное правило для выполнения кумулятивного интеграла (например, в python, use scipy.integrate.cumtrapz
), чтобы найти некоторый st
Но я надеюсь использовать значения и вместо и (когда это возможно).
numerics
integration
DilithiumMatrix
источник
источник
Ответы:
Вы можете просто изменить переменные. Установка , . Интеграл становитсяa=log(x) b(a)=log(y(x))
Вы должны быть немного осторожнее, потому что вы интегрируете из . Что именно вы должны сделать, будет зависеть от того, как выглядит .−∞ y(x)
источник
Я не использую python, но если я правильно понимаю, то с помощью вы думаете о чем-то вроде где - вектор, в котором выполняется выборка интеграла по сетке .
Однако у вас нет образцов и , а есть образцы и .x y x^=log(x) y^=log(y)
Конечно, самый простой подход будет
Теперь трапециевидное правило по существу предполагает ваш вкладy(x) кусочно-линейный Таким образом, простое обобщение будет для вас предположить, чтоy^(x^) кусочно-линейный
В этом случае, определяяΔFk=Fk+1−Fk , у тебя есть
Затем, определяяt=(x^−x^k)/Δx^k , у тебя есть
Таким образом, интеграл становится
В Matlab это будет выглядеть примерно так
Надеюсь это поможет!
(Редактировать: мой ответ по сути такой же, как и гораздо более краткий ответ, который Дамаск Сталь дал, когда я печатал. Единственное отличие состоит в том, что я пытался дать конкретное решение для случая, когда «конкретныйy(x) "кусочно-линейный y^(x^) дискретизирован по дискретному x^ сетка, с F(x^1)=0 .)
источник
Если функция выглядит гладко на графике log-log, вы можете интерполировать, используя степенной закон на каждом интервале (степенные законы, конечно, линейны в log-log). Таким образом, между точками(xi,yi) а также (xi+1,yi+1) при условии, что y=Cixni в пределах интервала i , вы получаете ni=ln(yi/yi+1)/ln(xi/xi+1) а также Ci=ln(yi)−niln(xi) , Вклад в интеграл от интервалаi затем
источник
Я думаю, что есть некоторая путаница с изменением переменных в некоторых из предыдущих ответов, а также с некоторыми ошибками. Интеграл лог-функции - это не лог интеграла. Я думаю, что в целом сложно выписать интеграл функции, зная интеграл ее логарифма. Если кто-нибудь знает, как это сделать, мне было бы интересно.
Между тем, решение @ Stefan, представленное выше, является способом обойти интеграцию функции в пространстве log-log. Отправной точкой является то, что функция, с которой вы работаете, является линейной в пространстве log-log для достаточно маленьких сегментов.
Затем можно написать уравнение линии в конечных точках сегмента:log(y1)=m1log(x1)+n1
log(y2)=m1log(x1)+n1
гдеm1 это наклон линии и n1 это у-перехват.
Вычитая два, можно найти:
and from substitution:n1=log(y1)−m1log(x1)
If in the log-log space the equation of a segment is close to a line then in normal (linear) space the equation of the segment is close to an exponential:
If we have a analytical formulation for this segment it is easy to integrate:
and∫x2x1y(x)dx=en1logx2x1,for m=−1
This feels a bit like cheating, but this is sampling in log-log space such that we can approximate the function in the linear space to an exponential with parameters derived from the log-log space.
источник
log([x_2/x_1]^{m_1+1} + 1)
, т. Е. В аргументе журнала есть дополнительный +1Решение, которое я использую, является в основном реализацией правила трапеции и использует
scipy.misc.logsumexp
функцию для поддержания точности. Если у вас есть какая-то функция,lny
которая возвращает логарифм,y
вы можете сделать, например:Значение
logI
- это журнал интеграла, который вы хотите.Очевидно, это не будет работать, если вам нужно установить
xmin = 0
. Но если у вас есть некоторый ненулевой положительный нижний предел для интеграла, вы можете просто поиграть с количеством точек,xvs
чтобы найти число, где интеграл сходится.источник