주어진 간격으로 스칼라 함수의 모든 근 을 찾아야 합니다. 기능에 불연속성이있을 수 있습니다. 알고리즘의 정밀도는 ε입니다 (예 : 알고리즘이 ε보다 가까운 두 개의 다른 근을 찾지 못하면 괜찮습니다).
그러한 알고리즘이 존재합니까? 그것에 관한 서류를 알려 주시겠습니까?
실제로, 나는 Brent의 알고리즘을 사용하여 주어진 간격에서 0을 찾는 기능과 주어진 간격에서 최소값을 찾는 기능이 있습니다. 이 두 함수를 사용하여 자체 알고리즘을 만들었지 만 더 나은 알고리즘이 있는지 궁금합니다. 내 알고리즘은 다음과 같습니다
나는 간격 [a,b]
과 함수로 시작 합니다 f
. 경우 sign(f(a+ε)) ≠ sign(f(b-ε))
, 내가 사이에 적어도 하나의 제로가 알고 a
하고 b
, 내가 찾을 z = zero(]a,b[)
. and z
의 값을 확인하여 실제로 0 인지 여부를 테스트합니다 (불연속 일 수 있음) . 그렇다면 발견 된 0의 목록에 추가합니다. 경우 와 모두 긍정적, 나는 검색 . 여전히 긍정적 인 경우 와 사이에 불연속성이있을 수 있으므로 검색 합니다. 만약 내가 반대 할 과 부정했다.z-ε
z+ε
f(a+ε)
f(b-ε)
m = min(]a, b[)
f(m)
m = max(]a,b[)
a
b
f(a+ε)
f(b-ε)
이제 찾은 ( z
또는 m
) 지점에서 함수의 0, 불연속 점 및 변곡점을 포함하는 스택을 만듭니다. 첫 번째 반복 후 스택은 이제 다음과 같습니다 [a, z, b]
. 간격 ]a,z[
과 에서 알고리즘을 다시 시작합니다 ]z,b[
. 두 지점 a
과 사이 b
에서 극한이 두 구간 끝과 동일한 부호를 가지며 두 극단에서 불연속이없는 경우 스택에서 구간을 제거합니다. 더 이상 간격이 없으면 알고리즘이 종료됩니다.