2014-06-20 6 views
0

matlab에서 f를 최적화하는 함수가 있습니다.이 함수는 원하는 변수 x = (x (1), x (2))에 따라 다릅니다. 최적화 할 필요가없는 두 개의 매개 변수 인 n과 c, 즉 n과 c에 대한 값의 행렬을 가지고 있으며 각 n과 c에 대해 최적의 x 값을 찾고 싶습니다.함수 핸들을 통해 추가 인수를 전달하여 Matlab에서 최적화 수행

clear all; 
clc; 
close all; 
[email protected](x,n,c)n*x(1)+(x(2)+3*c)/(x(1)+c); 
for n=1:10 
    for c=1:20 
     x=zeros(length(n),length(c)); 
     fun{n,c}[email protected](x)f(x,n,c); 
     options=optimset('Algorithm','interior-point') 
     x(n,c)=fmincon(fun{n,c},[0;0],[1 0;-1 0;0 1;0 -1],[40;0;40;0],[],[],[],[],[],options); 
    end 
end 

??? Subscripted assignment dimension mismatch. 

Error in ==> forloop2 at 10 
     x(n,c)=fmincon(fun{n,c},[0;0],[1 0;-1 0;0 1;0 
     -1],[40;0;40;0],[],[],[],[],[],options); 
Any helps? Thank you so much! 

답변

0

나는 당신이 실제로 질문을하지 않았다 두려워하지만, 여기에 답이있다 : :

function myOptimization 
clear all; 
clc; 
close all; 

results=cell(10,20); 
for n=1:10 
    for c=1:20 
     options=optimset('Algorithm','interior-point'); 
     fmincon(@(x)fun(x,n,c),[0;0],[1 0;-1 0;0 1;0 -1],[40;0;40;0],[],[],[],[],[],options); 
     resultingCoordinates=fmincon(@(x)fun(x,n,c),[0;0],[1 0;-1 0;0 1;0 -1],[40;0;40;0],[],[],[],[],[],options); 
     results{n,c}=resultingCoordinates; 
    end 
end 
results 
end 

function f=fun(x,n,c) 
f=n*x(1)+(x(2)+3*c)/(x(1)+c); 
end 

당신은 원래 코드에서 최소 3 오류를했다 다음은 내 코드입니다.

먼저 fmincon이 최적의 좌표를 갖는 벡터를 첫 번째 출력 인수로 반환하기 때문에 x (n, c) = fmincon ...이 작동하지 않습니다. 따라서 오류의 원인 인 행렬 "x"의 단일 위치에 벡터를 지정하려고합니다. 모든 출력 좌표를 저장할 수 있도록 셀 배열에 최적의 좌표를 넣었습니다. 최적의 "f 값"을 결과로 매트릭스로 지정하려면 [~, f (n, c)] = fmincon ...을 사용할 수 있습니다.

두 번째로, "x"는 좌표를 저장하려는 경우에도 출력 매트릭스의 실제 이름이 아닙니다. 최적의 좌표가 아닌 목표 함수에 대한 입력을 나타내는 데 오류가 발생할 수도 있습니다. 최적의 좌표 또는 최적의 기능 값에 대해 다른 이름을 사용하십시오. 이는 결과임을 나타냅니다.

셋째, 매개 변수를 변경할 때마다 출력 행렬/셀 배열을 계속해서 다시 할당 할 필요가 없습니다. 당신이 본질적으로 각 반복 결과를 지우려고 시도하는데, 당신이 그것을 저장하고 싶다면 작동하지 않습니다.

나는 또한 목적 함수를 함수로 분리하고 그 함수의 최적화를 다른 것으로 분리했다.

이 정보가 도움이되기를 바랍니다. 장래에 Stack Overflow에 관한 명확한 질문을 정의 해보십시오.