2012-11-08 2 views
1

단일 루트가 발견되기 전에 반복되는 횟수는 얼마나됩니까? 또한 어떤 것들이 뿌리입니까? 여기 분할 방법 (수치 해석)


내 코드입니다 :

e=0.000001; 
[email protected](x) 14.*x.*exp(x-2)-12.*exp(x-2)-7.*x.^3+20.*x.^2-26.*x+12; 

a=0; 
c=3; 
while abs(c-a)>e 
    b=(c+a)/2; 
    if f1(a)*f1(b)<0 
     c=b; 
    else 
     a=b; 
    end  
    disp(b); 
end 
+2

그래서 재귀에 출력물을 추가하고 직접 보지 않으시겠습니까? –

+1

필자는 함수 내부에 익숙하지 않아 구체적인 내용을 알 수 없지만 내부 변수의 값을 출력하고 어떤 값이 어떤 루트에 해당하는지 식별하지 않는 이유는 무엇입니까? 또는 알고리즘을 게시 할 수 있으며 직접 살펴볼 것입니다. –

+0

알고리즘은 하나의 루트 z = 0.857 만 찾았고 함수의 코드는 2로 설정되었습니다. 코드에 대한 링크를 게시하지 말고 질문에 포함 시키십시오. –

답변

5

양분이 간격의 절반이 루트를 포함해야합니다 몇 가지 초기 간격 [a,b]과 발견의 엔드 포인트를 복용하여 작동합니다 (그것은 중간 점을 평가하고 식별하는 반은있다 부호 변화). 그런 다음 이등분은 식별 된 절반에 대해 프로세스를 반복합니다.

이분은 가능한 루트에 수렴하고 기능이 [a,b] 내부에 여러 개의 뿌리가있는 경우,에 수렴 할 어떤 특정 루트 일반적으로 예측하기 어렵다. (참고 : 이분법은 완전히 결정론적인 알고리즘이기 때문에 같은 초기 간격을 주면 항상 똑같은 루트로 수렴됩니다. 반복은 발견 된 루트의 근사치를 단순화하기 만하면 다중 루트를 찾지 못합니다.

질문에 직접 대답하기 위해 이등분 의 세 가지 뿌리를 [0,3] 안에 모두 발견하지 않습니다. 단 하나의 루트를 찾고, 이것은 당신의 이등분 코드의 마지막 반복에 의해 확인됩니다. 이분법 반복에 의해 출력 된 모든 값은 알고리즘에 의해 결국 발견 된 하나의 루트로의 진보를 간단히 보여줍니다 (그리고이 값은 최종 값에 수렴하는 시퀀스 여야합니다).

+0

+1 : 포괄적 인 답변입니다. –

+0

3 개의 근원을 찾는 것에 대한 빠른 대답은 당신의 음모를보고 각각 하나의 뿌리만을 포함하는 3 개의 다른 간격을 선택하는 것입니다. 루트 이등분 발견을 보장하는 그런 식으로 올바른 것입니다. 다시 말하지만, 다른 루트 찾기 알고리즘을 사용하면 루트를 찾을 수 있습니다. 그것들을 비교할 때, 그들은 심지어 모두 같은 뿌리로 수렴하지 않을 수도 있고, 수렴은 초기 조건 (또는 이분법/세컨드 방법의 경우 간격)에 크게 의존합니다. 예를 들어 루트 자체에서 메소드 중 하나를 초기화하면 성능이 완벽 해집니다! – Sam

1

이분법 알고리즘은 정의 된 간격 사이에 하나의 근점만을 찾을 수 있도록되어 있습니다. 당신의 문제에서 세 가지 뿌리를 모두 찾을 수는 없지만, 다른 뿌리를 찾기 위해 다른 간격을 정하면 성공할 수 있습니다. 완전한 이론적 배경과 예제를 가지고이 샘플 프로그램 bisection method in Matlab을 살펴볼 수 있습니다.