我遇到了fmincon
问题,因为我不知道如何在Matlab 6.5中声明我的目标函数。我试图将我的目标函数声明为一个名为parameterfun
function y=parameterfun(X,A,b)
y=sum((A*X(:)-b).^2);
然后我尝试在以下例程中调用该函数
L=50e3;
n=5;
zi=linspace(0,L,n);
alpha=zi./L;
A=[alpha.^(5/3); alpha.^(5/6).*(1-alpha).^(5/6)]
lambda=1e-6;
k=2*pi/lambda;
Cn2=1e-16;
r0sw=(0.423*k^2*Cn2*3/8*L)^(-3/5);
rytov=0.1241*Cn2*k^(7/6)*L^(11/6);
b=[r0sw; rytov];
x0=(n/3*r0sw*ones(n,1)).^(-5/3); %%starting guess
fun=@parameterfun(X,A,b);
lb=zeros(n,1);
ub=0.1/1.33*(k*L)^(5/6)./A(2,:);
ub(A(2,:)==0)=50^(-5/3);
X = fmincon(fun,x0,[],[],[],[],lb,ub)
我真的不知道如何宣布和调用我的目标函数。任何帮助将不胜感激。
答案 0 :(得分:1)
您没有正确定义fun
。请尝试
fun = @(X) parameterfun(X,A,b);
通过这种方式,您可以定义一个函数句柄fun
,它接受单个输入参数x
并返回parameterfun(X,A,b)
。
有关详细信息,请参阅here。
答案 1 :(得分:0)
MATLAB 7 / R14中引入了匿名函数。您正在使用不支持匿名功能的Matlab 6.5 / R13。在较新的MATLAB版本中,Shai的建议将是解决方案:
public void DoSomethingWith(Language lang) {
}
// somewhere else I call it like this
DoSomethingWith(LanguageEnum.German);
对于旧的MATLAB版本,您必须使用内联
fun = @(X) parameterfun(X,A,b);