2012-02-05 4 views
0

변수의 합계를 포함하는 MATLAB 코드에서 표현식을 작성한 다음 어떻게 표현식을 최소화합니까? 예. I는 다음과 같은 기능을Matlab에서 합계 표현 쓰기

E = \ sum_ {I, J} C_ {IJ} (R_ {IJ}) + C2_ {IJ} (R_ {IJ})^2]

I을 최소화해야 i와 j가 변하는 r_ {ij} s의 모든 값에 대해 위 식을 최소화해야합니다.

fmincon()을 MATLAB에서 사용할 수는 있지만 fmincon()에 입력으로 적절하게 표현식을 쓸 수 없습니다.

감사합니다.

답변

1

이 시도 :

C, C2r이 같은 형태의 행렬이다
E = sum(sum(C.*r + C2.*r.^2)); 

.

1

fmincon 등의 최적화 함수는 모든 것을 표현식으로 쓸 필요가 없으므로 함수에 대해서도 최적화 할 수 있습니다.

function E = criterion(r, C, C2) 
    e = C.*r + C2.*r.^2; 
    E = sum(e(:)); 

나는 fmincon에 필요한 구문에 대한 완전히 잘 모르겠지만, 나는 그것이 theta 당신이 E이 최소가되도록 조정하려는 매개 변수 벡터가 E = f(theta), 같은 같아요. 귀하의 문제가 명확하게 설명되어 있지 않으므로 귀하의 매개 변수가 CC2이라고 가정합니다 (r이 귀하의 매개 변수 인 경우 대소 문자가 비슷하고 더 간단합니다).

fmincon은 벡터를 사용하여 계수를 저장하기 때문에 벡터를 사용하고 위의 criterion 함수에서 요구하는 크기로 변환하는 함수가 필요합니다. 현재 작업 공간의 변수 rValuesr 값을 포함 할 때 @(theta)(criterionRolledC(theta,rValues)) 할 것 :

function E = criterionRolledC(theta,r) 
    assert(numel(theta)==2*numel(r), 'The size of theta has to be twice the size of r'); 
    [M N] = size(r); 
    C = theta(1:M*N);  
    C2 = theta(M*N+1:end); 
    C = reshape(C , M, N); 
    C2 = reshape(C2, M, N); 

    E = criterion(r,C,C2); 

그런 식으로, 당신은 쉽게 최적화 프로그램의 인터페이스에 부합 익명 함수를 만들 수 있습니다.

function E = criterionRolledR(theta,C,C2) 
    assert(numel(theta)==numel(C), 'The size of theta has to be the same size as C'); 
    assert(all(size(C)==size(C2)), 'C and C2 need to have the same size'); 
    [M N] = size(C); 
    r = reshape(theta, M, N); 

    E = criterion(r,C,C2); 

그리고 당신은 다른 경우와 같이 익명 함수를 만들 수 있습니다 경우

는 정반대을 원하는, 당신의 매개 변수 r입니다 즉, 그것은 간단하다.