2017-11-30 14 views
-1

주어진 'A = B의 LN [맥스 (b 11)]가'이라고해결 B

a = b ln [ max (11, b) ] 

a, 어떻게 하나 b을 계산할 수 있는가? (반복 근사법을 사용해야합니까?)

+0

질문이 명확하지 않습니다. "반복"이란 무엇을 의미합니까? 어떤 알고리즘을 사용하고 있습니까? (반복을 많이 사용하는 알고리즘이 있습니까?) –

+0

@RoryDaulton : 반복 기법이 필요한지 아닌지에 대한 질문은 명확합니다. 어떻게 b를 얻을 수 있습니까? "어떤 알고리즘을 사용하고 있습니까?"- 내 질문에 다시 묻는 것 같습니다. 그게 내가 원하는 반복의 필요성을 묻는 이유입니다. (내가 필요하든 없든, 이전에는 모릅니다) –

+0

나는 사람들이 왜 투표를했는지 모르겠습니다. 얘들 아, 내 질문은 완전히 명확하다고 생각하며, 어떻게 b를 계산할 수 있는지. 이전에는 필자가 썼다. 여러분이 생각한다면,이 문제에 대해 반복 할 필요가 없다고 생각하면, 그냥 대답하고 어떻게되는지 알려주세요. 방금 이전에이 문제에 대한 반복이 필요하다고 가정했습니다. 이것이 유용한 질문이라고 생각되면이 페이지를 떠나십시오. –

답변

2

a/ln(11) <= 11의 경우이 방법이 해결책이며 반복 할 필요가 없습니다. 그렇지 않으면 b * ln(b) - a = 0을 푸십시오. Newton-Raphson과

+0

감사합니다. @Henrik. 도움이됩니다. 나는 이것을 시도 할 것이다. –

1

다음은 b와 a 대신 x와 y가있는 함수의 그래프입니다.

시점에서 "코너"가 있음을

enter image description here

주 (11, 11 LN (11)).

a = b ln 11 if b <= 11 
    b ln b if b > 11 

(내가 다른 StackExchange 사이트에 여기 MathJax 수 있으면 좋겠다!) W()Lambert W function입니다 the solution to the second versionb = exp(W(a))입니다

하는 것으로 : 함수는 다음과 같이 다시 쓸 수 있기 때문이다. 많은 프로그래밍 언어에는 Lambert W 함수를 구현하는 패키지가 있습니다. 예를 들어 파이썬에서는 scipy 패키지 calls it lambertw()을 사용합니다.

그래서 파이썬에서 전체 솔루션은 수학 모듈에서 scipy 모듈과 explog (LN에 해당)에서 lambertw 기능을 가져온 후,이 바퀴를 개혁하고보다 쉽습니다

b = (a/log(11) if a <= 11 * log(11) 
     else exp(lambertw(a))) 

입니다. scipy의 lambertw 함수는 연속 분수를 사용하여 대략적인 값을 얻은 다음 Newton-Raphson 메서드의 1 회 또는 2 회 라운드를 사용하여 최종 결과를 얻습니다. 이것은 Newton-Raphson 만 사용하는 것보다 빠릅니다.