fmincon
등의 최적화 함수는 모든 것을 표현식으로 쓸 필요가 없으므로 함수에 대해서도 최적화 할 수 있습니다.
function E = criterion(r, C, C2)
e = C.*r + C2.*r.^2;
E = sum(e(:));
나는 fmincon
에 필요한 구문에 대한 완전히 잘 모르겠지만, 나는 그것이 theta
당신이 E
이 최소가되도록 조정하려는 매개 변수 벡터가 E = f(theta)
, 같은 같아요. 귀하의 문제가 명확하게 설명되어 있지 않으므로 귀하의 매개 변수가 C
및 C2
이라고 가정합니다 (r
이 귀하의 매개 변수 인 경우 대소 문자가 비슷하고 더 간단합니다).
fmincon
은 벡터를 사용하여 계수를 저장하기 때문에 벡터를 사용하고 위의 criterion
함수에서 요구하는 크기로 변환하는 함수가 필요합니다. 현재 작업 공간의 변수 rValues
이 r
값을 포함 할 때 @(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
입니다 즉, 그것은 간단하다.