【发布时间】:2017-03-22 18:50:07
【问题描述】:
我正在尝试实现最速下降算法以最小化 2D 函数。让我举例说明。
我有函数 f1(x1,x2) = 2*x1^2 + x2^2 - 5*x1*x2 并从初始猜测点 p0 = [1,0] 开始。
第一步:初始猜测点p0 = [1,0],收敛参数e=0.1
第 2 步:计算 f1 在 p0 处的梯度 c1。 c1=[4,-5]我正在使用中心差分法。
第3步:如果c1>e正常,则进行第4步,否则停止。
第四步:我们的搜索方向是d1 = - c1。所以,d1 = [-4,5]。
第 5 步:找到步长 a 以最小化 f1(a) = f1(p0 + a*d1) = f1(1-4a,5a)
第 6 步:将 p0 更新为 p1 为 p1 = p0 + a * d1 并更新为第 2 步。
我正在尝试在matlab中实现这个例子,不知道如何实现第5步。我知道蚂蚁一维搜索算法,例如二分法可以工作。但是,问题是将f1(1-4a,5a)“转换”为函数,即将(1-4a,5a) 替换为f1。我在这里遇到符号常量a,我不知道如何处理。如果我编写一个最小化函数,我可以将值传递给它,但不确定符号变量a。我不想使用 matlab 的特殊功能,例如符号和试图将代码保持在一般级别,因此我可以将其转换为其他编程语言而不会出现任何问题。欢迎您提出建议。
【问题讨论】:
-
请向我们展示您目前拥有的代码。
标签: algorithm matlab mathematical-optimization