levmar는 개의 Levenberg-마르카토 비선형의 구현 C / C ++.에서 최소 제곱 알고리즘은
아르곤 국립 연구소에서 80 년대 초에 구현 Minpack에서 lmder 루틴, 아마도입니다 가장 널리 LM 알고리즘의 자유 구현을 사용했다. lmder는 포트란에 기록되고 수년에 걸쳐 소프트웨어의 신뢰성 조각 것으로 입증되었습니다. FORTRAN 루틴은 C / C ++에서 호출 할 수있는 점을 감안, 하나, 문제는 FORTRAN이 C에서 호출 될 때, 프로그래머가 알아야 할 것입니다 C. 음의 LM 버전을 작성하기위한 동기 부여에 대해 궁금해 (과 준수 수 있습니다 ) 보통의 C 규칙에 비해 자연스러운 아르 등 이름 맹 글링, 인수 전달, 다차원 배열의 메모리 레이아웃, 연결 규칙에 관한 몇 가지 규칙. 두 번째 이유는 타겟 프로그래밍 환경 FORTRAN 컴파일러 반드시 경우가 아닐 수도있는, 가능한지 당연이 방법은 소요한다는 것이다. 그것은 정확하게 FORTRAN 코드가 무엇을 이해하기 위해 필요한 경우 때때로, 그것의 특정 부분이 FORTRAN에 대한 지식없이 프로그래머가 이해할 수없는 보일 수 : 또 다른 이유는 FORTRAN 구현의 내부 동작을 이해하는 고장과 관련이있다. 생성 된 C 코드가 "미숙"인간에게 꽤 읽을 수 있기 때문에 C 변환기에 자동 FORTRAN (예 : f2c로는) 문제가 해결되지 않습니다. 또한, 문서는 구현이 모호하거나 액세스 할 수 있습니다 기반이되는 수학을 설명. 마지막으로, C에서 후보 LM 구현은 무료이며 기술적으로 타당해야한다. 예를 들어, (즉, mrqmin) "수치 조리법"책에 제시된 LM 알고리즘의 C 변형이 가능한 선택은 항상되지 않습니다 : 그 저작권이되고 게다가, 그것은 견고 함이 부족 평판이 좋다
. 위의 이유로, 나는 또한 C ++와 함께 사용할 수있다 LM 맛의 C 구현을 포함하는 levmar 패키지를 개발했다. levmar는 단일 및 이중 정밀 LM 구현을 포함, 모두 분석 및 유한 차분은 코비안을 근사. 그것은 GNU 일반 공중 사용 허가서의 조건에 따라, 무료로 제공됩니다. 제약 levmar 뒤에 수학적 이론은 K. 매드슨, HB에 의해, 비선형 최소 제곱 문제에 대한 강의 노트에 자세히 자격이 방법을 설명 닐슨과 O. Tingleff, 덴마크 기술 대학; 강의 노트에 제시된 알고리즘의 MATLAB 구현도 사용할 수 있습니다. 여기에 채택 된 최소화 문제의 제제는 강의 노트에 설명 된 것과 약간 다른 것을 그러나 참고
기능의 사용 :.
levmar는 순종 여러 사용자 호출 기능을 제공합니다 명명 규칙을 다음 첫 번째 문자 (D 또는 S 것은)을 두 번 또는 단일 정밀도와 접미사를 지정 (_der 또는 _dif) 분석 또는 대략 코비안을 나타낸다. 존재한다면, LEC, bc 및 blec 성분은 각각 선형 방정식, 상자 박스 동시 선형 방정식 제약을 의미한다. 보다 구체적으로, levmar는 다음과 같은 기능이 포함되어
구속 최적화가
dlevmar_der ()
: 이중 정밀도, 분석 코비
dlevmar_dif () : 이중 정밀도, 유한 차이가 근사 코비
의 slevmar_der () : 단 정밀도, 분석 코비
의 slevmar_dif () : 단 정밀도, 유한 차분은 제약 최적화하여
코비안을 근사
dlevmar_lec_der () : double 정밀도로, 선형 방정식 제약, 분석 코비
dlevmar_lec_dif () : double 정밀도로, 선형 방정식 제약, 유한 차이가 코비
slevmar_lec_der () 근사 : 단일 정밀도 선형 방정식의 제약, 분석 코비
slevmar_lec_dif () : 단 정밀도, 선형 방정식 제약, 유한 차분은 근사 코비
dlevmar_bc_der () : double 정밀도로, 상자 제약, 분석 코비
dlevmar_bc_dif () : double 정밀도로, 상자 제약, 유한 단 정밀도, 상자 제약, 분석 코비
의 slevmar_bc_dif () : 차이가 코비
slevmar_bc_der () 근사 더블 : 단일 정밀도, 상자의 제약, 유한 차분은 코비가
dlevmar_blec_der () 근사 정밀, 상자 및 선형 방정식 제약, 분석 코비
의 dlevmar_blec_dif () : 단 정밀도, 상자 및 선형 방정식 제약, 분석 코비 : double 정밀도로, 상자 및 선형 방정식 제약, 유한 차분는 코비
slevmar_blec_der ()를 근사
slevmar_blec_dif () : 단 정밀도, 상자 및 선형 방정식 제약, 유한 차분 함수의 반복적 인 평가에서 코비 결과를 근사 유한 차이를 사용하여 장착 할 것을 코비
공지 사항을 근사. 이러한 평가의 총 수를 감소시키는 목표로 xxxxxxx_dif 함수 Broyden 하나의 랭크를 이용하여 업데이트에 코비안 시컨트 근사치를 구현한다. 그들이 가장 (L2 규범의 관점에서) 설명하는 매개 변수 벡터 p를 측정 벡터 X를 추구 즉, 모든 기능은, 같은 문제를 해결한다. 더 정확하게, 벡터 함수 f 주어진 : R ^ m - N> = m와> R ^ N을, 그들은 AP를 계산되도록 F (P) ~ = x를, 제곱 규범 즉 || 전자 || ^ 2 = | | XF (P)는 || ^ 2가 최소화된다. 또한, 양식 파운드의 상자 제약 [내가]
이 릴리스의 새로운 기능입니다 :
이 버전은 수렴 할 때를 향상시킬 수 대각선 스케일링) (xlevmar_bc_der위한 지원, 추가 포인트를 시작하는 지금까지 진정한 최소화 기에서입니다.
플라즈마, 멀티 코어 프로세서에 대한 선형 대수 라이브러리와 병렬 촐레 스키 분해를 지원하는 선형 시스템 해결사.
그들은 더 나은 캐시 성능 결과 대칭 행렬의 낮은 삼각형에서 작동하도록 선형 솔버가 수정되었습니다.
프로젝트를 빌드하는 CMake 구성 파일이 변경되었습니다.
다른 여러 가지 사소한 변경이되었습니다.
이전 버전 사용자를위한
주의 :
이 버전 2.5의 새로운 기능 더 나은 일관성과 충돌의 회피를 들어, levmar의 헤더 파일의 이름 levmar하는 lm.h로 변경되었습니다. 시간; 따라서 소스 파일을 업데이트하십시오.
동시 상자, 선형 방정식과 부등식 제약에서 최소화에 대한 지원이 추가되었습니다 (기능 xlevmar_bleic_der ()를 참조 & xlevmar_bleic_dif ()).
구현 편의 래퍼 (xlevmar_bleic_der합니다) xlevmar_bleic_dif ()는 간단한 제약의 경우, 예를 들어 처리 상자 및 선형 불평등 제약 만에서 xlevmar_blic_der () xlevmar_blic_dif () 지원 최소화.
UDUt 분해 (즉, SQRT없는 콜레)를 기반으로 선형 시스템 해석을 추가했습니다.
대부분의 선형 솔버에서 불필요한 메모리 복사를 제거.
새로운 데이터 맞는 시험 문제 (오스본)를 추가했습니다.
다른 몇 가지 사소한 변경했다.
이 이전 버전 사용자를위한주의 : 새로운 수익 필드를 수용하는 한 증가 된 정보 인수 (즉, LM_INFO_SZ)의 크기 (즉,
이 버전 2.4의 새로운 기능 , INFO [9]) 즉, 최소화 과정 해결 선형 시스템의 총 개수에 대응한다. 정보 배열의 이전에 반환 된 필드의 인덱스는 변경되지 않습니다.
작은 크기의 최소화 문제에 대한 대략적인 헤센 J ^ T * J와 J ^ T의 * 전자를 계산하기 위해 더 많은 캐시 효율적인 방식을 구현했습니다.
선형 솔버의 호출 사이 유지하는 작업 메모리가 levmar 루틴의 종료에 출시 될 수 있는지를 확인.
선형 솔버가 과도하게 할당 가끔 피, 보조 메모리의 최소 필요한 양을 사용하는 것이 보장.
전자 = x를-HX의 계산 속도를 향상하기위한 루프 언 롤링 방식을 구현했습니다.
64 비트 시스템의 메모리 정렬에 문제가 몇 가지가 수정되었습니다.
결정 계수의 계산에 기능을 추가했습니다.
몇 가지 사소한 문제 렸습니다.
댓글을 찾을 수 없습니다