梯度下降算法求函数极小值 matlab编程举例
时间: 2023-09-14 18:07:00 浏览: 157
可以直接回答,以下是一个简单的例子:
function [x, f] = gradient_descent(f, x0, lr, eps, max_iter)
% f: 待优化的函数
% x0: 初始点
% lr: 学习率
% eps: 收敛精度
% max_iter: 最大迭代次数
% x: 最优解
% f: 最优解对应的函数值
x = x0;
f_last = f(x);
for i=1:max_iter
df = gradient(f, x);
x = x - lr * df;
f_current = f(x);
if abs(f_current - f_last) < eps
break;
end
f_last = f_current;
end
f = f_last;
% 例子:求二次函数 y = x^2 的极小值
f = @(x) x^2;
[x, f] = gradient_descent(f, 10, 0.1, 1e-6, 1000);
disp(['x = ', num2str(x), ', f(x) = ', num2str(f)]);
相关问题
梯度下降算法求多元函数极小值 matlab编程举例
可以的,关于梯度下降算法求多元函数极小值的 Matlab 编程,我可以为您提供一些基本的代码示例和解释,您可以参考以下内容:
假设我们要求解的多元函数为 f(x),其输入变量为向量 x=[x1,x2,...,xn],则梯度下降算法的基本思路是:不断迭代调整 x 的取值,使函数 f(x) 的值不断逼近极小值。
具体的迭代公式为:
x(i+1) = x(i) - alpha * grad(f(x(i)))
其中,grad(f(x(i))) 表示函数 f 在点 x(i) 处的梯度向量,alpha 表示步长或学习率,即每次迭代调整取值的幅度。
在 Matlab 中,我们可以使用以下代码实现梯度下降算法:
% 定义多元函数 f(x) 和其梯度 grad(f(x))
syms x1 x2
f = x1^2 + x2^2;
grad_f = [diff(f,x1),diff(f,x2)];
% 初始化输入变量 x 和学习率 alpha
x = [1,1];
alpha = 0.1;
% 迭代求解极小值
for i = 1:100
x = x - alpha * double(subs(grad_f,{x1,x2},x));
end
% 输出最终结果
x, double(subs(f,{x1,x2},x))
请注意,以上示例代码仅供参考,实际应用中需要根据具体问题进行修改和调整。
python-梯度下降法求函数极小值
梯度下降法是一种常用的优化算法,用于求解函数的极小值。在Python中,可以使用NumPy库来实现梯度下降法。
以下是使用梯度下降法求函数极小值的步骤:
1. 定义目标函数:首先,需要定义一个目标函数,即要求解极小值的函数。例如,我们可以定义一个简单的二次函数作为目标函数:f(x) = x^2。
2. 初始化参数:选择一个初始点作为起始点,并初始化学习率和迭代次数。学习率决定了每次迭代更新参数的步长,迭代次数决定了算法的收敛性。
3. 计算梯度:计算目标函数在当前参数点处的梯度。梯度表示了函数在该点处的变化率和方向。
4. 更新参数:根据梯度和学习率,更新参数的数值。更新规则为:参数 = 参数 - 学习率 * 梯度。
5. 迭代更新:重复步骤3和步骤4,直到达到指定的迭代次数或满足停止条件(例如梯度接近于零)。
下面是一个使用梯度下降法求解目标函数极小值的Python代码示例:
```python
import numpy as np
# 定义目标函数
def target_function(x):
return x**2
# 梯度下降法求解极小值
def gradient_descent(learning_rate, num_iterations):
# 初始化参数
x = 0
# 迭代更新
for i in range(num_iterations):
# 计算梯度
gradient = 2 * x
# 更新参数
x = x - learning_rate * gradient
return x
# 设置学习率和迭代次数
learning_rate = 0.1
num_iterations = 100
# 调用梯度下降法函数
result = gradient_descent(learning_rate, num_iterations)
print("极小值点:", result)
print("极小值:", target_function(result))
```
运行以上代码,将得到目标函数的极小值点和极小值。