2011-11-23 2 views
2

저는 lsqcurvefit을 사용하여 일부 작업을 수행하려고합니다.matlab : lsqcurvefit 및 매개 변수

function F = cdf_3p_model(a,data) 
F=1-((1-a(5)-a(6)).*(exp(-abs(data)./a(1)))+((1-a(4)-a(6)).*(exp(-abs(data)./a(2))))+((1-a(4)-a(5)).*(exp(-abs(data)./a(3))))); 

function [a residual] = cdf_fit_3p(x,y) 
a0 = [10 1 0.1 0.3 0.3 0.3]; 
lb = [0 0 0 0 0 0]; 
ub = []; 
curvefitoptions = optimset('Display','final','MaxFunEvals',100000,'MaxIter',50000); 
[a, residual] = fmincon(@cdf_3p_model,a0,x,y,lb,ub,curvefitoptions); 
end 

내가 초기 매개 변수, UB를 설정, 파운드하지만 어떻게 나는 또한 그 선언 않는다 : 나는 그런 기능이

a(1) > a(2) > a(3) 
a(5) + a(6) +a(7) = 1 

답변

3

다른 방법으로는 할 수없는 제약 조건을 지정할 수있는 fmincon과 같은 최소화 루틴 중 하나를 사용하는 것이 더 좋은 기회라고 생각합니다. 모델과 데이터의 차이의 L2 표준을 취함으로써 최소 제곱을 쉽게 통합 할 수 있습니다.

+1

답변 해 주셔서 감사합니다. 그것은 아주 쉽게 들리 겠지만, 방금 matlab에 시작했고 솔직히 "모델과 데이터의 차이점에 대한 L2 표준을 취함으로써 최소 제곱을 통합하는 방법"을 알지 못했습니다. :) 좀 더 많은 힌트를 주시겠습니까? ? – Art

+0

아마도 내가 너무 기술적이었습니다. 데이터의 실제 값이 벡터 형식으로 'F'에서 발견되고 피팅을 통한 모델 근사가 'Fm'이라고 가정합니다. 최소 제곱의 목적은 F와 Fm 사이의 거리 (특히 "유클리드")를 최소화하는 것입니다. [유클리드 표준] (http://en.wikipedia.org/wiki/Euclidean_norm#Euclidean_norm) 위키 피 디아의 호의를 참조하십시오. 따라서 궁극적으로 fmincon에 표준을 반환하면 최소화하기 위해 노력할 것이며, 따라서 제약 조건에 대한 추가 힌트로 LS- 근사값 – Rasman

+0

을 수행합니다. function [c, ceq] = curvefitoptions (x). 'c = [x (2) -x (1); x (5) + x (6) + x (7) -1 ' – Rasman

0

일반적으로 내가 말할 것 "조건을 충족시키지 않을 때 정말로 끔찍한 '점수'를주는 조항을 만들라." 그러나 조건에 따라 허용 가능한 매개 변수의 범위가 가능한 숫자 범위의 작고 작은 부분 집합이됩니다. 그렇게하면 lsqcurvefit가 수렴하지 않을 것입니다. 나는 lsqcurvefit이 당신을위한 올바른 해결책이 아니라고 말할 것입니다.

+1

감사합니다. 그럼, 나를 위해 더 나은 해결책이 될 수 있습니다 (누가 수학 및 matlab에 매우 유체되지 않습니다)? :) 감사! – Art

0

MatLab에 더 유용한 매개 변수 집합에서 원하는 매개 변수를 계산해야합니다. 그것은 완벽 하진

a(1) > a(2) > a(3) 
a(5) + a(6) + a(7) = 1 

lb = [0 0 0 0 0 0] 
ub = [Inf Inf Inf Inf 1 1] 

음과

a(3) = p(1) 
a(2) = p(1) + p(2) 
a(1) = p(1) + p(2) + p(3) 
a(4) = p(4) 
a(5) = p(5) 
a(6) = p(6) 
a(7) = 1 - p(5) - p(6) 

대로로 (7)의 낮은 수 있기 때문에

예를 들어, 당신은 다시 작성할 수 있습니다 - 1 대신 0입니다. 그러나 다른 제약 조건도 포함됩니다.