定义一个函数句柄matlab 6.5

时间:2015-05-07 08:59:17

标签: matlab function syntax

我遇到了fmincon问题,因为我不知道如何在Matlab 6.5中声明我的目标函数。我试图将我的目标函数声明为一个名为parameterfun

的单独m.file
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)

我真的不知道如何宣布和调用我的目标函数。任何帮助将不胜感激。

2 个答案:

答案 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);