FindRoot의 도움말 페이지에 숨겨진 사양은 무엇입니까?

“기본적으로 FindRoot는 Newton의 방법 (Newton-Raphson)을 사용하여 비선형 시스템을 해결합니다.”

(또는 내가 생각하는 비선형 방정식) 그럼에도 불구하고 FindRoot 명령에 숨겨진 것이 있습니다. 함수를 고려하십시오.

f[x]:=Exp[1 - x] - 1, 

뉴턴 반복 함수는

Nf[x_]:=E^(-1 + x) (-1 + E^(1 - x)) + x 

NestList를 사용하여이 함수로 반복 뉴턴의 방법에 의해 생성 된 일련의 값. 초기 추측 값의 큰 값에 대한 Newton 방법은이 문제에 대해 느린 수렴을 나타냅니다. $ x_0 = 10 $를 사용하면 다음과 같은 결과를 얻을 수 있습니다.

NestList[Nf, 10., 8] (* {10., -8092.08, -8091.08, -8090.08, -8089.08, -8088.08, -8087.08, -8086.08, -8085.08} *) 

여기서 우리는 느린 수렴. 함수 Nf[x] 플롯은 메서드의 동작을 이해하는 데 도움이됩니다. 하지만

Module[{s = 0, e = 0}, {FindRoot[f[x], {x, 10.}, StepMonitor :> s++, EvaluationMonitor :> e++], "Steps" -> s, "Evaluations" -> e}] 

생성

{{x -> 1.}, "Steps" -> 7, "Evaluations" -> 11} 

해결 방법을 얻기 위해 7 단계 만 필요합니다. x = 1 $. FindRoot가이 결과를 생성하는 이유는 무엇입니까? 분명히 FindRoot는 표준 Newton의 방법을 사용하지 않습니다. 그렇지 않습니까? 누구든지 나를 도울 수 있습니까? 감사합니다.

댓글

답변

기본적으로 FindRoot는 가이드 tutorial/UnconstrainedOptimizationLineSearchMethods<에 설명 된대로 단계 제어의 “LineSearch” 방법을 사용합니다. / div> . 기본 설정은

FindRoot[Exp[1 - x] - 1, {x, 10.}, Method -> {"Newton", "StepControl" -> {"LineSearch", "CurvatureFactor" -> Automatic, "DecreaseFactor" -> 1/10000, "MaxRelativeStepSize" -> 10, Method -> Automatic}}] 

뉴턴의 방법을 다소 정확하게 얻으려면 단계 제어를 사용하지 마십시오. 그러나 FindRoot는 여전히 최대 단계 크기를 제한합니다 (아래의 경우 첫 번째 단계는 x == -100.로 잘림).

Module[{s = 0, e = 0}, {FindRoot[Exp[1 - x] - 1, {x, 10.}, Method -> {"Newton", "StepControl" -> None}, StepMonitor :> s++, EvaluationMonitor :> e++], "Steps" -> s, "Evaluations" -> e}] 

FindRoot :: cvmit : 100 회 반복 내에서 요청 된 정확도 또는 정밀도로 수렴하지 못했습니다. >>

(* {{x -> -1.07713}, "Steps" -> 100, "Evaluations" -> 101} *) 

옵션을 사용하여

StepMonitor :> Print[{x}], EvaluationMonitor :> Print[x] 

단계 및 평가를 모니터링 할 수 있습니다. 또는 "Optimization`UnconstrainedProblems`" 패키지의 FindRootPlot를 사용합니다. (단계가 아닌 평가를 나타내는 노란색 점을주의 깊게 살펴보십시오.)

Needs["Optimization`UnconstrainedProblems`"] FindRootPlot[Exp[1 - x] - 1, {x, 10.}, PlotRange -> All] 

수학 그래픽

FindRootPlot[Exp[1 - x] - 1, {x, 10.}, Method -> {"Newton", "StepControl" -> None}, PlotRange -> All] 

Mathematica 그래픽

댓글

  • 다른 방법으로 설명 : FindRoot[] 댐핑 된 버전의 Newton-Raphson을 사용합니다. 댐핑이 없으면 시작 값을 잘못 선택하면 더 자주 차이가 발생합니다. 댐핑은 반복이 거칠어 질 가능성을 줄입니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다