2013-08-01 2 views
1

pygsl의 multifit_nlin 모듈을 사용하여 비선형 최소 제곱 피팅을 수행하고 있습니다. pygsl은 c 수치 라이브러리 gsl의 파이썬 바인딩입니다. 내가 겪고있는 문제는 pygsl 또는 gsl과 관련이없는 것 같지만이 컨텍스트에서만 나타납니다.gsl, pygsl, lmsder, 메모리 누출, 일치하지 않는 출력

일부 데이터에는 함수의 매개 변수가 들어 있습니다. 피팅 매개 변수에 대해 pygsl을 사용하려면 함수 및 해당 자코비안을 정의해야합니다. 그런 다음 multifit_nlin의 fitter lmsder는 피팅 프로세스에서 필요할 때이 두 함수를 호출합니다. jacobian을 호출 할 때 숫자 행렬을 생성합니다. 이 행렬을 화면에 출력 할 수 있으며 번호가 정확하다는 것을 알 수 있습니다. 다음으로 lmsder 클래스를 정의하고 lmsder.set 명령으로 초기화합니다. linux.getJ() 명령을 사용하여 jacobian 행렬을 출력하고 이전과 같은 번호를 봅니다. 물론, 이것은 내 코드로하고 싶지 않지만 설명과 디버깅 목적으로 만 사용합니다.

코비안 및 lmsder.getJ()의 출력 사이의 계약

는() lmsder.getJ 때문에 예상 행렬식 함수에 의해 생성 된 메모리 코비안 행렬 액세스 될지있다. 내가 코드를 한 줄을 삽입 할 경우, ... 적절한 인수. 그런 다음 인쇄 solver.getJ을 의미 다음

system = gsl_multifit_function_fdf(...) # jacobian is passed here 
solver = lmsder(...)     # system is passed here 
solver.set(...)       # first call to jacobian is in here 
print "bob" 
print solver.getJ() 

같이 (또는 다른 것), '인쇄'밥 말을() 인쇄 더 낮은 행에 임의의 내용으로 채워진 jacobian 행렬의 조옮김 인 행렬입니다. set() 및 getJ() 호출 사이에 여분의 코드 행이있는 경우에만 발생합니다.

코드를 정상적으로, 즉 내가 가지고있는 전체 피팅 프로세스 코드를 오류가 무료로 작동합니다 .Jacobian 행렬을 참으로 getJ() 명령을 보여 주었다면 예외가 제기 될 수있는 곳이 꽤있을 것이다. 내 코드가 작동하는지 확인해야합니다. 매개 변수에 대한 값은 합리적입니다.

또한 pygsl이 gsl의 c 라이브러리에 대한 모든 호출 체인을 추적했습니다. 이 문제를 일으키는 원인은 없습니다. 또한, gsl은 여러 연령대에 걸쳐 사용되어 왔으며, 매트릭스를 표시하는 것만 큼 간단 할 수도 있습니다.

이 문제의 원인에 대한 제안 사항이 있으십니까? 가비지 수집기, import 문의 순서가 잘못됨, 멀티 코어? 메모리 누수, 가비지 수집 프로세스를 확인하는 데 사용할 수있는 도구는 무엇입니까?

감사합니다, 알렉산더

답변