주어진 간격으로 함수의 모든 근을 찾습니다


9

주어진 간격으로 스칼라 함수의 모든 근 을 찾아야 합니다. 기능에 불연속성이있을 수 있습니다. 알고리즘의 정밀도는 ε입니다 (예 : 알고리즘이 ε보다 가까운 두 개의 다른 근을 찾지 못하면 괜찮습니다).

그러한 알고리즘이 존재합니까? 그것에 관한 서류를 알려 주시겠습니까?


실제로, 나는 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[)abf(a+ε)f(b-ε)

이제 찾은 ( z또는 m) 지점에서 함수의 0, 불연속 점 및 변곡점을 포함하는 스택을 만듭니다. 첫 번째 반복 후 스택은 이제 다음과 같습니다 [a, z, b]. 간격 ]a,z[과 에서 알고리즘을 다시 시작합니다 ]z,b[. 두 지점 a과 사이 b에서 극한이 두 구간 끝과 동일한 부호를 가지며 두 극단에서 불연속이없는 경우 스택에서 구간을 제거합니다. 더 이상 간격이 없으면 알고리즘이 종료됩니다.


2
간격 산술을 기반으로하는 방법이 있습니다.
lhf

답변:


6

Matlab을 사용하는 경우 Chebfun 시스템 을 사용해 볼 수 있습니다 (면책 조항 :이 프로젝트의 적극적인 개발자였습니다). 기계 정밀도를 위해 닫힌 또는 열린 간격으로 1 차원 함수의 모든 근을 찾을 수 있습니다.

Chebfun 루트 파인더의 기본 아이디어 는 대상 함수의 보간 계수에 재귀 이분법과 컴패니언 매트릭스 와 유사한 동료 매트릭스의 조합을 사용하는 것입니다 .

여기에 간단한 코드 버전이 있습니다 . 이 함수 chebroots는 익명 함수를 첫 번째 입력으로 사용하고, 유한 간격을 두 번째 및 세 번째 인수로, 정도 N를 네 번째 및 마지막 인수로 사용합니다. 합리적인 결과를 얻으려면로 설정할 N100있습니다.


0

일반적으로 이것은 기능의 연속성 및 / 또는 차별화에 대한 정보가 없으면 희망이없는 퀘스트입니다. 예를 들어 0에서 1까지의 간격에 정의 된 MATLAB 함수를 고려하십시오.

함수 y = f (x)

y = 1.0;

(x == 0.01) 인 경우

y = 0.0;

종료

경우 (x == 0.013)

y = 0.0;

종료

만약 (x == 0.753124)

y = 0.0;

종료

이 함수를 블록 상자로 취급하면 0과 1 사이의 모든 부동 소수점 숫자를 확인하지 않고이 세 점에서 0이 있고 0에서 1 사이의 다른 점이 없다는 것을 알 수있는 방법이 없습니다.


1
이러한 종류의 0을 찾기는 분명히 불가능하지만 @Charles는 점프 불연속성을 가진 최악의 블랙 박스 기능에 관심이있는 것으로 보였지만 소위 이동식 불연속성이 아닙니다.
Bill Barth

1
불연속으로 점프하지 않고 연속 함수로 제한하더라도 함수가 알려진 간격으로 Lipschitz 연속이 아닌 경우 한정된 수의 포인트에서 평가에서 모든 0을 찾는다고해서 모든 뿌리를 얻으십시오.
Brian Borchers

특히, 기능을 고려하십시오 sin(1/x) 간격에서 모든 0을 찾는 예제로 [0,1]어려울 것입니다.
Wolfgang Bangerth 2016 년

OP는 기꺼이 ϵ. 기능이 병리학 인 경우 많은 영점을 찾을 수 있지만 그것은 인생처럼 보입니다. 그러한 병리를 피하기 위해 검색을 위해 최대 간격을 설정해야 할 수도 있습니다.
Bill Barth
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.