matlab多重积分的数值计算的算法_[数值计算] 一些经典的优化算法

本文介绍了MATLAB中用于多重积分数值计算的一些经典优化算法,包括Steepest Descent、Newton's Method以及Quasi-Newton Methods。在Steepest Descent中,讨论了步长的选择策略。Newton's Method涉及Hessian Matrix,但可能存在稳定性不足和计算量大的问题。Quasi-Newton Methods如BFGS和L-BFGS通过迭代更新矩阵来近似Hessian,提供更快的收敛速度。此外,文章还比较了Gauss-Newton Method与Quasi-Newton Method在非线性最小二乘问题中的应用和差异。
摘要由CSDN通过智能技术生成

1. Steepest Descent

核心

是f在x处下降最快的方向。

问题:如何选择步长

方法1:在

方向做一次line search(用比如牛顿法),选择在这条线上能到达的最小的f对应的x作为下一步的起始点。

114a10c7-062f-eb11-8da9-e4434bdf6706.png

其中

是第k次迭代的步长。每次迭代都需要一个子优化过程,所以很慢!

方法2:恒定步长(太小的话收敛太慢,太大会jitter、diverge),或者动态调整,比如逐步减小步长、RProp、Quick Prop、 RMSprop。

def steepest_descent(func, x):
    ret = [copy.copy(x)]
    delta_x = np.zeros_like(x) + 1.0
    partial_grad_func = elementwise_grad(func)
    while np.linalg.norm(delta_x) > 1e-8 and len(ret) < 2001:
        partial_grad = - partial_grad_func(x)
        scaling_factor = 1.0
        delta_scaling_factor = 1.0
        def F(eta):
            return np.dot(partial_grad_func(x+eta*partial_grad),partial_grad)
        def grad_F(eta):
            return grad(F)(eta)
        i = 0
        while abs(delta_scaling_factor) > 1e-8 and i < 1000:
            delta_scaling_factor =
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值