MATLAB中带向量值输入的极小化函数

MATLAB中带向量值输入的极小化函数,matlab,optimization,mathematical-optimization,gradient-descent,Matlab,Optimization,Mathematical Optimization,Gradient Descent,我想最小化如下函数: 在这里,n可以是5,10,50等。我想使用Matlab,并希望使用梯度下降和拟牛顿法与BFGS更新一起解决这个问题,以及回溯线搜索。我是Matlab的新手。有人能帮忙吗?我可以在该链接中找到类似问题的解决方案: 但是,我真的不知道如何在Matlab中创建向量值函数。在我的例子中,输入x可以是一个n维向量。要想达到目的,你必须做出很大的飞跃-我可以建议你先学习一些,以便理解基本的Matlab语法和概念吗?另一个有用的读物是中无约束优化的基本示例。但是,您的问题的答案只涉及基本

我想最小化如下函数:

在这里,n可以是5,10,50等。我想使用Matlab,并希望使用梯度下降和拟牛顿法与BFGS更新一起解决这个问题,以及回溯线搜索。我是Matlab的新手。有人能帮忙吗?我可以在该链接中找到类似问题的解决方案:


但是,我真的不知道如何在Matlab中创建向量值函数。在我的例子中,输入x可以是一个n维向量。

要想达到目的,你必须做出很大的飞跃-我可以建议你先学习一些,以便理解基本的Matlab语法和概念吗?另一个有用的读物是中无约束优化的基本示例。但是,您的问题的答案只涉及基本语法,因此我们可以很快地完成它

调用优化工具箱中的无约束非线性优化算法的绝对最小值是目标函数的表达式。该函数应该返回函数在任意给定点x的函数值f,在本例中,它读取

function f = objfun(x)
    f = sum(100 * (x(2:end) - x(1:end-1).^2).^2 + (1 - x(1:end-1)).^2);
end
注意

我们通过选择x向量的各个分量

.^符号表示操作数要平方

为简单起见,请将此函数保存到当前工作目录中的objfun.m文件中,以便从命令窗口获得它

现在,您需要做的就是从命令窗口调用适当的优化算法,例如,拟牛顿法:

n = 10; % Use n variables
options = optimoptions(@fminunc,'Algorithm','quasi-newton'); % Use QM method
x0 = rand(n,1); % Random starting guess
[x,fval,exitflag] = fminunc(@objfun, x0, options); % Solve!
fprintf('Final objval=%.2e, exitflag=%d\n', fval, exitflag);
在我的机器上,我看到算法收敛:

找到了局部最小值

优化已完成,因为渐变的大小小于 最优性公差的默认值

最终objval=5.57e-11,exitflag=1


为了达到你想要的目的,你必须做出很大的飞跃——我建议你先学习一些,以便理解基本的MATLAB语法和概念?另一个有用的读物是中无约束优化的基本示例。但是,您的问题的答案只涉及基本语法,因此我们可以很快地完成它

调用优化工具箱中的无约束非线性优化算法的绝对最小值是目标函数的表达式。该函数应该返回函数在任意给定点x的函数值f,在本例中,它读取

function f = objfun(x)
    f = sum(100 * (x(2:end) - x(1:end-1).^2).^2 + (1 - x(1:end-1)).^2);
end
注意

我们通过选择x向量的各个分量

.^符号表示操作数要平方

为简单起见,请将此函数保存到当前工作目录中的objfun.m文件中,以便从命令窗口获得它

现在,您需要做的就是从命令窗口调用适当的优化算法,例如,拟牛顿法:

n = 10; % Use n variables
options = optimoptions(@fminunc,'Algorithm','quasi-newton'); % Use QM method
x0 = rand(n,1); % Random starting guess
[x,fval,exitflag] = fminunc(@objfun, x0, options); % Solve!
fprintf('Final objval=%.2e, exitflag=%d\n', fval, exitflag);
在我的机器上,我看到算法收敛:

找到了局部最小值

优化已完成,因为渐变的大小小于 最优性公差的默认值

最终objval=5.57e-11,exitflag=1