2012-08-22 3 views
3

matlab에 levenberg-Marquardt 최소 제곱 법을 사용하여 4 개의 알려지지 않은 매개 변수가있는 거대한 함수를 내 데이터에 적합 시키려고합니다. 이 명령을 사용했습니다 :levenberg marquardt 커브 피팅 여러 매개 변수를 사용하는 MATLAB

[x, resnorm]=lsqcurvefit(@myfun1,[-100:100], xdata, ydata, ... 
         [-inf, -inf, -1.5, -inf], [inf, inf, 1.5, inf], options) 

즉, 세 번째 매개 변수를 제한하려고합니다. 그러나 나는이 문제에 직면

??? Error using ==> lsqncommon at 102 
Levenberg-Marquardt and Gauss-Newton algorithms do not handle bound constraints and trust-region-reflective algorithm 
requires at least as many equations as variables; aborting. 

Error in ==> lsqcurvefit at 258 
[xCurrent,Resnorm,FVAL,EXITFLAG,OUTPUT,LAMBDA,JACOB] = ... 

나는이 오류가 36 점 또는 어쩌면 너무 많은 알 수없는 매개 변수가 있기 때문에 내 데이터가 작은 것을 알 수 있다고 생각하지만, 내가 피팅에 대한 네 개의 알 수없는 매개 변수를 잘 생각!

그래서, 어떻게 생각하십니까? MATLAB이이 36 점 데이터에 내 기능을 맞출 수 없다는 뜻입니까?

의견을 보내 주시면 감사하겠습니다.

답변

4

http://www.mathworks.co.uk/help/toolbox/optim/ug/lsqcurvefit.html에 따르면 두 번째 인수는 최적화하려는 매개 변수의 시작 값입니다. 당신은 (내가 마지막으로 사용 된 이후 matlab에 크게 변경하지 않는 한) (201 개) 매개 변수의 벡터 인

[-100:100] 

전달하고, 그래서 당신은 201 개 매개 변수를 통해 최적화하기 위해 MATLAB을 요구하는 것으로 보인다. 아래 단락에서 @Dan은 포인트가 36이므로 데이터 포인트가 36 개 뿐이므로 질문하는 것은 불합리한 것입니다. 단 4 개의 매개 변수를 최적화하여 4 개의 시작 값을 입력해야합니다. 한계 옵션에 대해 길이 4 벡터를 전달하므로 여기에 불일치가 있습니다.

매개 변수에 대한 4 개의 시작 값 벡터를 두 번째 인수로 입력하고 예상 결과를 생성하는지 확인하는 것이 좋습니다.

+0

나는 MATLAB이 단지 36 개의 데이터 포인트로 201 개의 매개 변수에 의해 정의 된 커브에 맞도록 요구 되었기 때문에 에러 메시지라고 생각한다. 다른 말로하면, LM이 할 수없는 방정식만으로는 201 개의 unknow가 있습니다. [-100 : 100]을 [0 0 0 0]과 같이 변경하거나 계산할 수있는 더 합리적인 출발점은 거의 확실하게이 오류를 해결합니다. – Dan

+0

@ Dan 예. 동의합니다. 귀하의 의견에 대한 답변을 가리 키도록 답변을 업데이트했습니다. – mathematician1975

관련 문제