2013-02-14 3 views
0

저는 프로그래밍 초보자입니다. 각 열이 2 개인 약 100 개의 데이터 세트가 있습니다. 나는 즉MATLAB : for 루프 내에서 fmincon 사용

variable(col1) = parameter1 x (variable(col2))^ parameter2 

(say a (x^b)). 

가 지금은 최적화 기능 fmincon를 사용하여 두 개의 매개 변수의 값을 좀하고 싶습니다 COL2 데이터의 전력 함수로 COL1 데이터를 맞게합니다. 100 개의 모든 데이터 세트에 대해이 작업을 반복하고 싶으므로이 fmincon을 for 루프 내에 포함 시키려합니다.이 루프에서는 각 데이터 세트의 데이터를 한 번에 하나씩 호출합니다. 나는 최선을 다했는데 어떻게해야하는지 알 수 없다.

제안 사항?

+0

이 질문이 데이터 세트와 'for' 루프와 아무런 관련이없는 것 같습니다. 'fmincon'을 사용하는 방법에 대한 질문입니다. 따라서, 그것은 표현이 잘 못되어 닫히거나 근본적으로 편집 할 것을 제안합니다. – Shai

답변

0

첫 번째 열 데이터 집합 kXk과 두 번째 열 Yk (크기는 m x 1)을 호출 할 수 있습니다. 나는 각 데이터 세트 k {Xk, Yk} 두 스칼라ak 모든 요소 1..m

더 방정식/제약이 있기 때문에 대한 bk 등이

Yk == ak * Xk.^bk을 찾고 있습니다에 대한 다음, 제대로 질문을 이해한다면 매개 변수 (m 방정식과 두 개의 매개 변수 만 사용)보다 최소 제곱 해를 구합니다. fmincon 또는 다른 최적화 도구없이 can be solved easily - 식 수율

log Yk == log ak + bk * log Xk 

새로운 변수를 정의 YYk <- log(Yk)XXk <- log(Xk) 우리의 양측으로부터 log 촬영

log akbk위한 선형 식을 갖는다. 우리는 모든 사람 (즉 XXk(:,2)=1이다)의 또 다른 컬럼과 컬럼 벡터 XXk를 추가하는 경우
사실, 우리는 몇 가지 MATLAB 코드에 대한

XXk * [ b ; log(ak)] == YYk 

이제 매트릭스 형태로 우리의 시스템을 작성할 수 있습니다

N = 100; % number of data sets 
a = zeros(1, N); % pre allocate room for all ak 
b = zeros(1, N); % pre allocate room for all bk 
for k = 1 : N 
    % get the data here: Xk = ???, Yk = ??? 
    XXk = log(Xk); 
    XXk(:,2) = 1; % add all ones column 
    YYk = log(Yk); 
    tmp = XXk \ YYk 
    a(k) = exp(tmp(2)); 
    b(k) = tmp(1); 
end 
+0

답장을 보내 주셔서 대단히 감사합니다. 나는 내 질문에 중요한 요소를 놓쳤다. 스칼라 (매개 변수) 중 하나에 대해 몇 가지 제약 조건이 있으므로 fmincon을 사용하려고했습니다. 그렇지 않으면 로그를 사용하여 방정식의 선형화에 동의합니다. – user1957000

+0

@ user1957000 불쌍한 점에 대해 언급하지 않으 셨습니다. 하지만 기본적으로'kk'를 반복적으로''Xk''와'Yk''를 사용하여'for' 루프를 만들었습니다 - 그냥'fmincon'을 꽂아서 끝내십시오. – Shai

+0

thats 내가 문제에 직면하고있다 .fmincon은 함수를 입력으로 취하지 만 함수는 일부 입력을 받아 일부 출력을 반환한다. 그러나 여기서는 필자의 경우 함수에 대한 입력이 없기 때문에 최적화를 통해 이러한 값을 찾아야합니다. 내가 얼마나 명확한지는 모르겠지만 위와 같이 미리 코드를 줄 수 있다면 정말 도움이 될 것입니다. – user1957000