로그 로그 공간에 통합


10

나는 일반적으로 로그 로그 공간에서 훨씬 매끄럽고 더 나은 동작을 수행하는 함수를 사용하고 있습니다. 이러한 숫자 함수를 로그 로그 공간에 통합하는 방법이 있습니까?

즉, 누적 적분을 수행하기 위해 일종의 간단한 사다리꼴 규칙을 사용하기를 바라고 있습니다 (예 : python에서 scipy.integrate.cumtrapz).F(r)

F(r)=0ry(x)dx

그러나 나는 값을 사용하기를 바라고있다. log(y)log(x), 대신에 yx (가능할 때).


이 링크 ( my.originlab.com/forum/topic.asp?TOPIC_ID=1251 )를 발견했습니다.이 링크 는 평소와 같은 방식으로 진행됩니다. 로그 로그 공간에서 기울기와 계산을 계산합니다. 그런 다음 Lin-lin 공간으로 변환하고 통합하고 평가하십시오.
MrMas

답변:


6

변수를 변경할 수 있습니다. 환경a=log(x), b(a)=log(y(x)). 적분은

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

당신은 통합하기 때문에 약간 조심해야 . 정확히 무엇을해야하는지에 따라y(x) 처럼 보인다.


답변 주셔서 감사합니다! 그러나 이것이 선형 공간에서 적분을 효과적으로 수행한다고 생각합니다. 어쩌면 나는 불가능한 것을 요구하고있다.
DilithiumMatrix

2
아니요, 이것은 로그 공간에서 필수입니다. 분별할 때da선형 공간이 아닌 로그 공간의 크기가 동일합니다.
Damascus Steel

1
@DilithiumMatrix가 옳다 : x 값은 로그 공간에 있지만 보간은 y값은 선형 공간에서 발생합니다. 따라서 사다리꼴 규칙을 사용하는 경우 효과적으로 통합되는 함수는 대수 x 축 및 선형 y 축이있는 플롯에서 부분적으로 선형입니다.
burnpanck

3

나는 파이썬을 사용하지 않지만 올바르게 이해하면

F(r)=0ry(x)dx
당신은 같은 것을 생각하고 있습니다
F=integrate(y,x)
어디 F=[F1,...,Fn] 그리드의 적분을 샘플링하는 벡터입니다. x.

그러나 당신은 샘플이 없습니다 xy오히려 오히려 샘플이 있습니다. x^=log(x)y^=log(y).

물론 가장 간단한 방법은

F=integrate(exp(y^),exp(x^)),
그러나 이것은 오류가 발생하기 쉽습니다. y(x) 비록 매끄럽지는 않지만 y^(x^) 입니다.

이제 사다리꼴 규칙 은 입력을 가정합니다.y(x)부분적으로 선형입니다. 간단한 일반화는y^(x^) 부분적으로 선형입니다.

이 경우 ΔFk=Fk+1Fk당신은

ΔFk=xkxk+1y(x)dx=x^kx^k+1ey^(x^)ex^dx^=x^kx^k+1y~(x^)dx^

그런 다음 정의 t=(x^x^k)/Δx^k당신은

y^k+ty^k+tΔy^k
y~(t)aebta=ey^k+x^kb=Δy^k+Δx^k.

그래서 적분은

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

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

도움이 되었기를 바랍니다!

(편집 : 제 답변은 입력 할 때 Damascus Steel이 제공 한 훨씬 더 간결한 답변과 동일합니다. 유일한 차이점은 "특히 y(x)"는 부분 선형입니다 y^(x^) 불연속으로 이산 x^ 와 메쉬 F(x^1)=0.)


@DamascusSteel에 대한 응답으로 방금 말했듯이 귀하의 (매우 명확한) 답변에 감사드립니다 --- 이것은 선형 선형 공간으로의 적분을 되돌리고 로그 공간의 이점을 잃어 가고 있다고 생각합니다.
DilithiumMatrix 3

1
@ DilithiumMatrix : 이것은 DamascusSteel의 답변과 다릅니다. 사다리꼴 규칙을 DamascusSteel의 대답에 적용하면exp(b)1b인자.
burnpanck

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

이전 답변 중 일부에서 변수 변경과 약간의 오류가 혼동된다고 생각합니다. 로그 함수의 적분은 적분의 로그가 아닙니다. 나는 일반적으로 로그의 적분을 아는 함수의 적분을 작성하는 것이 어렵다고 생각합니다. 누구든지 그 방법을 알고 있다면 관심이 있습니다.

한편, 위의 @Stefan의 솔루션은 로그 로그 공간에 함수를 통합하는 방법입니다. 시작점은 다루는 함수가 충분히 작은 세그먼트를 위해 로그 로그 공간에서 선형이라는 것입니다.

그런 다음 세그먼트 끝점에서 선의 방정식을 쓸 수 있습니다. 여기에 이미지 설명을 입력하십시오

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

어디 m1 선의 기울기 n1 y 절편입니다.

둘을 빼면 다음을 찾을 수 있습니다.

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

그리고 대체에서 :

n1=log(y1)m1log(x1)

로그-로그 공간에서 세그먼트의 방정식이 선에 가까운 경우 정상 (선형) 공간에서 세그먼트의 방정식은 지수에 가깝습니다.

y(x)xmen

이 세그먼트에 대한 분석 공식이 있으면 쉽게 통합 할 수 있습니다.

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

x1x2y(x)dx=en1logx2x1,for m=1

이것은 부정 행위처럼 느껴지지만 이것은 로그 로그 공간에서 샘플링되어 선형 로그 공간의 함수를 로그 로그 공간에서 파생 된 매개 변수로 지수로 근사 할 수 있습니다.


이것은 훌륭한 @elenapascal이며, 이것은 3 년 이상 나를 귀찮게 해 왔으며 이것이 해결책이라고 생각합니다. 나는 당신의 마지막 관계를 따르지 않습니다. 나는 y에 대한 적분이 log (x2 / x1)와 같지 않다고 생각합니다
DilithiumMatrix

나는 왼쪽 측면에서 통합의 로그를 가지고가는 경우에 특히, 다음, 나는 오른쪽 유사한 용어를 얻을 수 있지만, 함께 log([x_2/x_1]^{m_1+1} + 1), 즉 로그의 인수에 추가 한이
DilithiumMatrix

@Stefan이 동일한 답변을 게시했다는 것을 깨달았을 때만 오늘도 나를 귀찮게했습니다. m = -1의 경우 y의 정의에서 y (x) = e ^ n / x를 대체합니다. 그것은 로그를 제공합니다. 나는 당신의 두 번째 게시물을 따르지 않을 것입니다
Elena Pascal

방금 같은 것을 깨달았지만, 당신의 설명을 읽을 때까지 완전히 이해하지 못했습니다
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)

# 사다리꼴 규칙 통합 수행
델타 = np.log (np.diff (xvs))
logI = -np.log (2.) + logsumexp ([logsumexp (lys [:-1] + deltas), logsumexp (lys [1 :] + deltas)])

logI은 원하는 적분의 로그입니다.

설정해야 할 경우 분명히 작동하지 않습니다 xmin = 0. 그러나 적분에 대해 0이 아닌 양의 하한이 있으면 xvs적분이 수렴하는 수를 찾기 위해 포인트 수를 가지고 놀 수 있습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.