【问题标题】:defining a function handle matlab 6.5定义函数句柄matlab 6.5
【发布时间】:2015-05-07 08:59:16
【问题描述】:

我遇到了fmincon 问题,因为我不知道如何在 Matlab 6.5 中声明我的目标函数。我试图将我的目标函数声明为一个单独的 m.file,名为 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)

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

【问题讨论】:

  • 您遇到的错误究竟是什么?您需要发布此内容以获得更好的答案。
  • 我收到消息:???错误:文件:C:\MATLAB6p5\work\carolingio.m 行:24 列:18 缺少运算符、逗号或分号。

标签: matlab function syntax


【解决方案1】:

您没有正确定义fun。请尝试

fun = @(X) parameterfun(X,A,b);

这样你定义了一个函数句柄fun接受单个输入参数x并返回parameterfun(X,A,b)
请参阅here 了解更多信息。

【讨论】:

  • 仍然无法工作 我收到消息:???错误:文件:C:\MATLAB6p5\work\carolingio.m 行:24 列:预期 6“标识符”,找到“(”。
  • @CarolinaRickenstorff 第 24 行是什么样的?在不以清晰方式提供所有相关信息的情况下,您如何期望任何人解决您的问题?
  • 对不起,我的程序和发布的完全一样,但我忘了清理它上面的一些 cmets,因此第 24 行是:fun=@(x) parameterfun(X,A,b)
  • @CarolinaRickenstorff 如果你在命令窗口中输入>> doc function_handle,你会得到什么?
  • 它将我重定向到帮助文档。使用 ver 命令告诉我我有 Optimization Toolbox 版本 2.2 (R13)。我猜这个问题与向量 X 和 x0 有关。
【解决方案2】:

在 MATLAB 7 / R14 中引入了匿名函数。您正在使用不支持匿名函数的 Matlab 6.5 / R13。在较新的 MATLAB 版本中,来自 Shai 的建议将是解决方案:

fun = @(X) parameterfun(X,A,b);

对于旧的 MATLAB 版本,您必须改用内联

fun=inline('parameterfun(X,A,b)','X')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-30
    • 2019-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多