Інтеграл у просторі журналу


10

Я працюю з функціями, які, як правило, набагато плавніші та краще поводяться в просторі журналу --- тому я виконую інтерполяцію / екстраполяцію тощо, і це дуже добре працює. Чи є спосіб інтегрувати ці числові функції в журнальний простір?

тобто я сподіваюся використовувати якесь просте трапецієподібне правило, щоб виконати кумулятивний інтеграл (наприклад, у python, use scipy.integrate.cumtrapz), щоб знайти деякий stF(r)

F(r)=0ry(x)dx

Але я сподіваюся використовувати значення та , а не та (коли можливо).log(y)log(x)yх


Я знайшов це посилання ( my.originlab.com/forum/topic.asp?TOPIC_ID=1251 ), яке, здається, спрямовується так само, як я б ішов: обчислити нахил та перехопити в просторі журналу журнал. Потім перетворіть у простір Лін-Ліна, інтегруйте та оцінюйте.
МістерМас

Відповіді:


6

Ви можете просто змінити змінні. Встановлення , . Інтеграл стаєa=log(x)b(a)=log(y(x))

F(r)=log(r)exp(a+b)da

Ви повинні бути трохи обережними, тому що ви інтегруєтесь з . Що саме потрібно зробити, залежатиме від того, як виглядає .y(x)


Дякую за Вашу відповідь! Але я думаю, що це ефективно просто виконання інтеграла в лінійному просторі. Можливо, я прошу чогось неможливого…
DilithiumMatrix

2
Ні, це є інтегралом у просторі журналу. При дискретизації має однаковий розмір у просторі журналу, а не лінійному просторі. da
Дамаск Сталь

1
@DilithiumMatrix правий: дискретизація значень знаходиться у логічному просторі, але інтерполяція значень відбувається у лінійному просторі. Таким чином, якби ви використовували трапецієподібне правило, функція, яка ефективно інтегрується, є кусочно лінійною у графіку з логарифмічною віссю x та лінійною віссю y. ху
опік

3

Я не використовую python, але якщо я правильно зрозумів, то за допомогою ви думаєте щось на зразок де - векторний вибірковий інтеграл через сітку .

Ж(r)=0rу(х)гх
Ж=iнтегrате(у,х)
Ж=[Ж1,...,Жн]х

Однак у вас немає зразків і , а скоріше ви маєте зразки та .хух^=журнал(х)у^=журнал(у)

Звичайно, найпростішим підходом було би але це було б схильним до помилок, оскільки не є рівним, навіть якщо є.

Ж=iнтегrате(досвід(у^),досвід(х^)),
у(х)у^(х^)

Тепер трапецієподібне правило по суті передбачає, що ваш вхід є кусочно лінійним. Отже, для простого узагальнення було б припустити, що є кусочно лінійним.у(х)у^(х^)

У цьому випадку, визначаючи , ви маєте ΔЖк=Жк+1-Жк

ΔЖк=хкхк+1у(х)гх=х^кх^к+1еу^(х^)ех^гх^=х^кх^к+1у~(х^)гх^

Тоді, визначаючи , у вас є і , з і .т=(х^-х^к)/Δх^к

у^к+ту^к+тΔу^к
у~(т)аебта=еу^к+х^кб=Δу^к+Δх^к

Тож інтеграл стає

ΔЖкаΔх^01ебтгт=аΔх^еб-1б

У Matlab це виглядало б приблизно так

dlogx=diff(logx); dlogy=diff(logy); k=1:length(logx)-1;  
b=dlogx+dlogy; a=exp(logx+logy);  
dF=a(k).*dlogx.*(exp(b)-1)./b;  
F=cumsum([0,dF]);

Сподіваюся, це допомагає!

(Редагувати: Моя відповідь, по суті, така ж, як і набагато більш стисла відповідь, яку дав Дамаск Стіл, коли я друкував. Єдина різниця - я намагався дати конкретне рішення для випадку, коли "конкретний " є кусочно -лінійна дискретна над дискретною сіткою , )у(х)у^(х^)х^F(x^1)=0


Дякую за Вашу (дуже чітку) відповідь, але, як я щойно сказав у відповідь на @DamascusSteel --- я думаю, що це просто повернення інтегралу до лінійно-лінійного простору та втрата переваг журнального простору.
DilithiumMatrix

1
@DilithiumMatrix: Це не та сама відповідь, як відповідь DamascusSteel. Зауважте, що застосування правила трапеції до відповіді DamascusSteel не дасть коефіцієнта . exp(b)1b
опік

3

Якщо функція виглядає гладкою на графіку журналу журналу, ви можете інтерполювати, використовуючи закон про потужність на кожному інтервалі (закони потужності, звичайно, лінійні в журналі журналу). Таким чином, між точками та за умови, що в інтервалі , ви отримуєте і . Тоді внесок у інтеграл від інтервалу становить (xi,yi)(xi+1,yi+1)y=Cixniini=ln(yi/yi+1)/ln(xi/xi+1)Ci=ln(yi)niln(xi)i

ΔFi=xixi+1Cixnidx={Cini+1(xi+1ni+1xini+1),ni1Ci(lnxi+1lnxi),ni=1,
де вам, очевидно, потрібна певна толерантність для визначення особливого випадку у вашій реалізації.ni=1

3

Я думаю, що в деяких попередніх відповідях є певна плутанина зі зміною змінних, а також деякі помилки. Інтеграл функції журналу не є журналом інтеграла. Я думаю, що взагалі важко виписати інтеграл функції, знаючи інтеграл її журналу. Якщо хтось знає, як це зробити, мені було б цікаво.

Тим часом рішення @ Стефана вище - це спосіб обійти інтеграцію функції в просторі журналу. Вихідним моментом є те, що функція, якою ви займаєтесь, лінійна в просторі журналу журналу для досить малих сегментів.

Потім можна записати рівняння рядка в кінцевих точках відрізка: введіть тут опис зображення

log(y1)=m1log(x1)+n1
log(y2)=m1log(x1)+n1

де m1 - нахил лінії і n1 є його y-перехоплення.

Віднімаючи ці два, можна знайти:

м1=журнал(у1)-лог(у2)журнал(х1)-лог(х2)

і від заміщення:

н1=журнал(у1)-м1журнал(х1)

Якщо в просторі журналу журналу рівняння відрізка близьке до рядка, то у звичайному (лінійному) просторі рівняння відрізка близьке до експоненціалу:

у(х)хмен

Якщо у нас є аналітична рецептура для цього сегмента, її легко інтегрувати:

х1х2у(х)гх=ен1м1+1(х2м1+1-х1м1+1),для м-1

і

х1х2у(х)гх=ен1журналх2х1,для м=-1

Це трохи схоже на обман, але це вибірка в просторі журналу журналу таким чином, що ми можемо наблизити функцію в лінійному просторі до експонента з параметрами, отриманими з простору журналу журналу.


Це чудово @elenapascal, це мене турбує вже понад 3 роки, і я думаю, що це (або дуже близьке) рішення. Я не дуже
логіці

Зокрема, якщо я беру журнал інтеграла з лівого боку, то я отримую аналогічний термін з правою стороною, але з log([x_2/x_1]^{m_1+1} + 1), тобто є додатковий +1 в аргументі журналу
DilithiumMatrix

Мене це сильно турбувало і сьогодні, лише після того, як я написав це, я зрозумів, що @Stefan опублікував ту саму відповідь. Для m = -1 ви просто замінюєте це у визначенні y: y (x) = e ^ n / x. Це дає журнали. Я не впевнена, що я стежу за вашим другим повідомленням
Олена Паскаль

Я щойно зрозумів те саме, але до кінця не зрозумів, поки не прочитав ваше пояснення
DilithiumMatrix

1

Я використовую рішення - це в основному реалізація правила трапеції та використовує scipy.misc.logsumexpфункцію підтримки точності. Якщо у вас є якась функція, lnyяка повертає логарифм yтоді, ви можете це зробити, наприклад:

з імпорту scipy.misc logsumexp
імпортувати numpy як np

xmin = 1e-15
xmax = 1e-5

# отримати значення x, розташованих логарифмічно
xvs = np.logspace (np.log10 (xmin), np.log10 (xmax), 10000)

# оцініть свою функцію в xvs
lys = lny (xvs)

# виконати інтеграцію правил трапеції
deltas = np.log (np.diff (xvs))
logI = -np.log (2.) + logsumexp ([logsumexp (lys [: - 1] + deltas), logsumexp (lys [1:] + deltas)])

Значення logI- це журнал інтегралу, який ви хочете.

Очевидно, це не вийде, якщо вам потрібно встановити xmin = 0. Але якщо у вас є якась ненульова позитивна нижня межа інтеграла, ви можете просто пограти з кількістю точок, xvsщоб знайти число, де інтеграл сходиться.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.