लॉग-लॉग स्पेस में इंटीग्रल


10

मैं उन कार्यों के साथ काम कर रहा हूं, जो सामान्य रूप से, बहुत चिकनी हैं और लॉग-लॉग स्पेस में बेहतर व्यवहार करते हैं --- ताकि जहां मैं प्रक्षेप / एक्सट्रपलेशन, आदि करता हूं, और वह बहुत अच्छी तरह से काम करता है। क्या लॉग-लॉग स्थान में इन संख्यात्मक कार्यों को एकीकृत करने का एक तरीका है?

अर्थात, मैं कुछ खोजने के लिए एक संचयी अभिन्न (उदाहरण के लिए अजगर, उपयोग scipy.integrate.cumtrapz) करने के लिए कुछ सरल ट्रैपोज़ाइडल नियम का उपयोग करने की उम्मीद कर रहा हूंF(r) सेंट

F(r)=0ry(x)dx

लेकिन मैं और (जब संभव हो) के बजाय मान और का उपयोग करने की उम्मीद कर रहा हूं ।log(y)log(x)yx


मुझे यह लिंक ( 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) की तरह लगता है।


आपके प्रतिक्रिया के लिए धन्येवाद! लेकिन मुझे लगता है कि यह प्रभावी रूप से रैखिक अंतरिक्ष में अभिन्न प्रदर्शन कर रहा है। हालांकि मैं कुछ असंभव के लिए पूछ रहा हूँ ...
Dil लिथियमMatrix

2
नहीं, यह लॉग स्पेस में इंटीग्रल करता है। जब विवेक,daलॉग स्पेस में समान रूप से आकार है, रैखिक स्थान नहीं।
दमिश्क स्टील

1
@Dil लिथियमMatrix सही है: का विवेक x मान लॉग-स्पेस में हैं, लेकिन का प्रक्षेप yमान रैखिक स्थान में होता है। इस प्रकार, यदि आप ट्रेपोज़ॉइडल नियम का उपयोग करने वाले थे, तो प्रभावी रूप से एकीकृत होने वाला फ़ंक्शन लॉगरिदमिक एक्स-अक्ष और रैखिक वाई-अक्ष के साथ एक प्लॉट में रैखिक रैखिक है।
बर्नपार्क

3

मैं अजगर का उपयोग नहीं करता हूं, लेकिन अगर मैं सही तरीके से समझता हूं तो

F(r)=0ry(x)dx
आप कुछ सोच रहे हैं
F=integrate(y,x)
कहाँ पे F=[F1,...,Fn] एक ग्रिड पर अभिन्न नमूना का एक सदिश नमूना है x

हालाँकि आपके पास नमूने नहीं हैं x तथा y, बल्कि आपके पास के नमूने हैं x^=log(x) तथा y^=log(y)

बेशक सबसे सरल तरीका होगा

F=integrate(exp(y^),exp(x^)),
लेकिन यह त्रुटि-प्रवण होगा, क्योंकि y(x) चिकनी नहीं है, भले ही y^(x^) है।

अब ट्रैपेज़ॉइडल नियम अनिवार्य रूप से आपके इनपुट को मानता हैy(x)टुकड़ा रेखीय है। तो आपके लिए साधारण सामान्यीकरण यह माना जाएगाy^(x^) टुकड़ा रेखीय है।

इस मामले में, परिभाषित करना ΔFk=Fk+1Fk, आपके पास

Δएफ=एक्सएक्स+1y(एक्स)एक्स=एक्स^एक्स^+1y^(एक्स^)एक्स^एक्स^=एक्स^एक्स^+1y~(एक्स^)एक्स^

फिर, परिभाषित करना टी=(एक्स^-एक्स^)/Δएक्स^, आपके पास

y^+टीy^+टीΔy^
तथा y~(t)aebt, साथ में a=ey^k+x^k तथा b=Δy^k+Δx^k

तो एकात्म हो जाता है

ΔFkaΔx^01ebtdt=aΔx^eb1b

मतलाब में यह कुछ इस तरह दिखेगा

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]);

उम्मीद है की यह मदद करेगा!

(संपादित करें: मेरा उत्तर अनिवार्य रूप से उसी अधिक संक्षिप्त उत्तर के समान है जो दमिश्क स्टील ने दिया था जैसा कि मैं टाइप कर रहा था। एकमात्र अंतर यह है कि मैंने उस मामले के लिए एक विशेष समाधान देने का प्रयास किया है जहां "विशेष" y(x)"एक टुकड़ा-रैखिक है y^(x^) असतत पर विवेक x^ जाल, साथ F(x^1)=0।)


आपकी (बहुत स्पष्ट) प्रतिक्रिया के लिए धन्यवाद, लेकिन जैसा कि मैंने अभी @DamascusSteel --- के जवाब में कहा है- मुझे लगता है कि यह सिर्फ रैखिक-रैखिक स्थान के अभिन्न अंग को बदल रहा है, और लॉग-स्पेस के लाभों को खो रहा है।
Dil लिथियमMatrix

1
@Dil लिथियमMatrix: यह दमिश्कसेल की तरह एक ही जवाब नहीं है। ध्यान दें कि दमिश्क के उत्तर के लिए ट्रेपोजॉइड-नियम लागू करने का जवाब नहीं दिया जाएगाexp(b)1bकारक।
बर्नपार्क

3

यदि फ़ंक्शन लॉग-लॉग प्लॉट में सुचारू दिखता है, तो आप प्रत्येक अंतराल (पावर कानून, लॉग-लॉग में रैखिक) पर एक पावर लॉ का उपयोग करके प्रक्षेप कर सकते हैं। इस प्रकार, अंकों के बीच(xi,yi) तथा (xi+1,yi+1) उस धारणा के तहत y=Cixni अंतराल के भीतर i, आप प्राप्त करते हैं ni=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

where m1 is the slope of the line and n1 is its y-intercept.

By subtracting the two, one can find:

m1=log(y1)log(y2)log(x1)log(x2)

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:

y(x)xmen

If we have a analytical formulation for this segment it is easy to integrate:

x1x2y(x)dx=en1m1+1(x2m1+1x1m1+1),for m1

and

x1x2y(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.


This is wonderful @elenapascal, this has been bothering me for over 3 years now, and I think this is (or is very close to) the solution. I don't quite following your last relation, I don't think the integral over y equal to the log(x2/x1)
DilithiumMatrix

In particular, if I take the log of the integral on the left-hand-side, then I get a similar term to the right hand side, but with log([x_2/x_1]^{m_1+1} + 1), i.e. there is an additional +1 in the argument of the log
DilithiumMatrix

It bothered me a lot today as well, only after I wrote it I realised @Stefan had posted the same answer. For m=-1 you just replace that in the definition of y: y(x)=e^n/x. That gives logs. I'm not sure I follow your second post
Elena Pascal

I just realized the same thing, but I hadn't fully understood until I read your explanation
DilithiumMatrix

1

The solution I use is basically an implementation of the trapezium rule and makes use of the scipy.misc.logsumexp function to maintain precision. If you have some function lny that returns the logarithm of y then you can do, e.g.:

from scipy.misc import logsumexp
import numpy as np

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

# get values of x spaced logarithmically
xvs = np.logspace(np.log10(xmin), np.log10(xmax), 10000)

# evaluate your function at xvs
lys = lny(xvs)

# perform trapezium rule integration
deltas = np.log(np.diff(xvs))
logI = -np.log(2.) + logsumexp([logsumexp(lys[:-1]+deltas), logsumexp(lys[1:]+deltas)])

The value logI is the log of the integral that you want.

स्पष्ट रूप से यह काम नहीं करेगा यदि आपको सेट करने की आवश्यकता है xmin = 0। लेकिन, यदि आपके पास अभिन्न के लिए कुछ गैर-शून्य सकारात्मक निचली सीमा है, तो आप xvsएक संख्या को खोजने के लिए अंक के साथ खेल सकते हैं जहां अभिन्न अभिसरण करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.