수치 적 ODE 솔버 구현을 어떻게 테스트합니까?


26

수치 ODE 솔버소프트웨어 라이브러리 작업을 시작 하려고하며 솔버 구현을위한 테스트를 공식화하는 방법에 어려움을 겪고 있습니다. 내 야심은 결국 라이브러리에는 비 강성 및 뻣뻣한 문제에 대한 솔버와 적어도 하나의 암시 적 솔버 ( 매트랩 ode루틴 기능과 동등하거나 그 이하 )가 포함되므로 테스트 방법론은 다양한 것을 반영해야한다는 것입니다 다른 솔버에 대한 문제 유형과 기준.

내 문제는 이제이 테스트를 시작할 위치를 모른다는 것입니다. 알고리즘의 출력을 테스트하는 몇 가지 다른 방법을 생각할 수 있습니다.

  • 분석 솔루션이있는 문제를 테스트하고 수치 솔루션이 반환 된 모든 데이터 포인트에 대한 허용 수준 내에 있는지 확인하십시오. 여기에는 다른 솔버가 다루기를 원하는 모든 속성 (강성, 암시 적 문제 등)을 나타내는 여러 가지 분석 문제에 대한 지식이 필요합니다.

    이 방법 은 솔버 방법 의 결과 를 테스트합니다 . 따라서 솔버가 실제로 작동한다는 보장은 없으며 주어진 테스트 문제에 대해서만 작동한다는 보장은 없습니다 . 따라서 솔버가 작동하는지 자신있게 확인하려면 많은 테스트 문제가 필요하다고 생각합니다.

  • 구현하려는 알고리즘을 사용하여 몇 시간 동안 솔루션을 수동으로 계산 한 다음 솔버와 동일한 작업을 수행하고 결과가 동일한 지 확인하십시오. 이를 위해서는 문제 에 대한 진정한 해결책에 대한 지식이 필요하지 않지만 실제로 많은 실제 작업이 필요합니다.

    이 방법은, 다른 한편으로는, 단지 테스트 알고리즘 내게로 괜찮습니다, - 다른 사람이 4 입증 한 경우 룽게 - 쿠타 작동하기 위해, 나는 필사적 필요를 느끼지 않는다. 그러나 테스트 데이터를 생성하는 좋은 방법을 알지 못하기 때문에 테스트 사례를 공식화하는 것이 매우 번거로울 것이라고 걱정합니다 (수작업으로 많은 작업이 필요합니다).

위의 두 가지 방법 모두 현재의 지식으로 인해 나에게 심각한 한계가 있습니다. 첫 번째 테스트 문제에 대해 좋은 세트를 알지 못하고 두 번째 테스트 데이터를 생성하는 좋은 방법을 모릅니다.

수치 적 ODE 솔버를 확인하는 다른 방법이 있습니까? 확인해야 할 구현에 대한 다른 기준이 있습니까? ODE 솔버를 테스트하는 데 좋은 (무료) 리소스가 있습니까? 1

편집 :
이 질문은 매우 광범위하기 때문에 조금 명확히하고 싶습니다. 내가 만들고 싶은 테스트 스위트는 두 가지 주요 목적을 채울 것입니다.

  1. 해결하려는 문제에 대해 솔버가 예상대로 작동하는지 확인 다시 말해, 뻣뻣하지 않은 문제에 대한 솔버는 뻣뻣한 문제에서 바나나를 사용할 수 있지만 뻣뻣하지 않은 문제에서는 잘 수행해야합니다. 또한 라이브러리에 더 높은 정확도를 제공하는 다른 솔버가있는 경우 "정확한"정도로 매우 정확한 결과를 적용 할 필요가 없습니다. 따라서 제 질문의 일부는 어떤 솔버에 어떤 테스트를 사용해야하는지입니다. 또는 적어도 어떻게 그것을 결정해야 하는가.

  2. 라이브러리 설치시 위생 테스트. 이러한 테스트는 정교하거나 시간 소모적 일 필요는 없습니다. 5 초 이내에 실행될 수있는 매우 기본적인 내용이지만, 차트에 이상한 것이 있으면 사용자에게 경고합니다. 따라서 매우 간단한 테스트를 구성 할 수있는 방법이 필요하지만 여전히 라이브러리 상태에 대해 알려줍니다.


1 예,의 주목할만한 예외와 함께, 아주 사소한 예와 강의 노트를 내 눈을 인터넷 검색을 봤는데,하지만 난 무엇을 발견의 대부분은 바리에서 CWI ODE 테스트 세트 내가 얼마나 알고하지 않거나 테스트하려는 것보다 훨씬 더 정교한 솔버를 다루기 때문에 내 목적으로 사용할 수 있습니다 ...


2
@ user75064 : 물론입니다! 나는 심지어 사이트가 존재한다는 것을 몰랐다.
Tomas Aschan

이 답변에는 Math Stack Exchange의 다른 테스트 세트에 대한 링크가 있습니다 .
Geoff Oxberry

@GeoffOxberry : 이전에 몇 가지를 찾았습니다. 이들 중 대부분은 FORTRAN으로 구현되며 독자가 동일한 언어로 솔버를 테스트하려고한다고 가정하여 다른 오류 소스를 추가합니다. 그러나 몇 가지 (DETEST 제품군의 기사)가 실제로 유용한 것으로 판명되었습니다. 고마워요!
Tomas Aschan

답변:


12

이것은 매우 광범위한 질문이며 생각해야 할 사항이 있습니다 (일부는 이미 게시물에 포함되어 있지만 완전성을 위해 여기에서 반복됩니다).

문제의 범위

  • 문제점을 지정하는 방법의 인터페이스를 정의해야합니다.
  • 수정 가능하거나 솔루션에 따라 다를 수있는 매개 변수를 허용 하시겠습니까?
  • ϵ
  • 당신은 무한한 정밀도를 허용 할 것입니까?
  • 수치 정밀도에 대한 속도와 감도를 테스트 할 예정입니까?
  • 결과를 비교하기 위해 이미 존재하는 두 개의 라이브러리를 선택 했습니까?
  • 중지 기준을 어떻게 선택하고 다양한 방법을 사용하고 사용자가 자신의 고유 한 항목을 선택하거나 정의하게 하시겠습니까?
  • 다양한 측정 값을 사용하여 오류를 측정하고 사용자가 해당 측정 값을 켜거나 끌 수 있습니까?
  • CAS (Computer-Algebra-Systems)와 같은 전문 패키지를 살펴보고 그들이 허용하는 모든 옵션을 이해 했습니까?
  • 결과 및 / 또는 비교 및 ​​/ 또는 플롯을 표시 할 수 있습니까?

문제 추천

  • 문제의 원인, 문제의 테스트 방법 범위, 결과 실행 및 루틴 실행 메트릭을 정의하는 테스트 스펙을 작성해야합니다.
  • 나는 그들이 이미 사용중인 문제 (아마도 테스트 파일)에 대해 이미 다른 라이브러리를 살펴볼 것입니다.
  • 나는 대학 도서관에 가서 ODE에 관한 책을 훑어보고 닫힌 형식이나 숫자 만있는 솔루션으로 알려진 모든 유형의 문제를 꺼낼 것입니다.
  • 사례 1 : 정확한 결과와 숫자 결과를 비교하기 위해 가능한 많은 형태의 폐쇄 형 솔루션 문제를 원합니다.
  • 사례 2 : 나는 모든 예제를 찾아서 캡처하여 복제 할 수있는 모든 수치 분석 책으로갔습니다. 또한 문제 세트, 특히 대부분의 책에 존재하는 병리학이있는 문제 세트 (이 유형 또는 그 유형에 대한 민감도)를 추가로 캡처합니다.
  • 사례 3 : 물리, 생태, 생물학, 경제 등과 같은 응용 수학의 다른 분야로 갈 것입니다. al 및 해당 도메인 각각에서 문제점을 캡처하여 문제점의 스펙 언어가 그러한 예를 허용하는지 검증하십시오.
  • 사례 4 : 특정 저자가 병리학, 이상 또는 경도를 설명하기 위해 특정 접근 방식을 수정해야하는 가장 유용한 예제가 포함 된 논문 / 저널을 연구하려고합니다.
  • 사례 5 : 웹에서 추가 예제를 검색하십시오. 들어 뻣뻣한 , 여기에 대한 참조를보고 시험 문제를 색출하기 위해 ALL을 정독. 다음은 살펴볼 몇 가지 MATLAB 예제입니다.

이것은 독특하지 않습니다. Dennis와 Schnabel의 "제한되지 않은 최적화와 비선형 방정식에 대한 수치 적 방법", 부록 B, "테스트 문제"를 보면, 그것들이 어떻게 작동했는지 볼 수 있습니다. 내가 본 것 중 가장 아름다운 알고리즘 쓰기 세트 중 하나를 개발 한 후, 문제가 발생했을 때 문제가 발생했습니다. 당신은 여기 저기 비틀어 야했다! 그들은 솔버의 능력을 변형시킨 5 가지의 매우 다른 병리학 적 문제를 포함했다. 이것은 우리가 여러 가지 이유로 처리 할 수없는 알고리즘에서 문제를 계속 던질 수 있다는 것을 가르쳐주었습니다. 그들은 심지어 More ', Garbow and Hillstrom 에서이 일련의 문제를 빌려 왔습니다.

다시 말해, 이것은 사소한 작업이 아닙니다. 항상 업데이트의 유효성을 테스트하고 문제를 해결하지 못하는 알려진 답변 테스트 사례가 필요합니다. 다시 말해서, 쉬운 것부터 어려운 것, 불가능한 것, 불가능한 것까지 반복 가능하고 광범위한 문제들이 있습니다. 당신은 또한 솔버가 그 한계를 진정으로 이해하기 위해 처리 할 수없는 일련의 문제들이 필요합니다.


2

ODE 솔버에 대해 실행하는 하나의 온 전성 검사는 시스템 매트릭스의 지수를 정확하게 계산하여 작은 선형 시스템에서 간단히 확인하는 것입니다. 즉 주어진

=에이

오류를 확인하십시오

특급(에이)0^()

^()

그냥 시간 스테퍼 중 하나를 사용하여 지수를 계산하지 않는다 (즉 반신 반의하는 방법 번호 6 : http://www.cs.cornell.edu/cv/researchpdf/19ways+.pdf )


참고 사항 : DE 통합자는 부정확성이 아니라 스케일링 + 제곱에 비해 비효율적이라는 점에서 "의심스러운"것으로 간주되었습니다.
JM

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.