最速下降法代碼

最速下降法(Steepest Descent Method)是一種常用於最小化函數的算法。它的基本思想是從一個初始點開始,沿著梯度方向(即函數值變化最快的方向)一步步地移動,以達到函數的最小值。下面是一個使用Python編寫的最速下降法的簡單示例:

import numpy as np

def function_to_minimize(x):
    return x**2 + 1

def gradient_of_function(x):
    return 2 * x

def steepest_descent(initial_x, learning_rate, num_iterations):
    x = initial_x
    for t in range(num_iterations):
        gradient = gradient_of_function(x)
        x = x - learning_rate * gradient
        print("Iteration {0}: x = {1}".format(t, x))
    return x

# 示例使用
initial_x = 1.0
learning_rate = 0.1
num_iterations = 10

minimum_x = steepest_descent(initial_x, learning_rate, num_iterations)
print("Minimum found at x = ", minimum_x)

這個代碼首先定義了一個二次函數及其導數(梯度)。然後,steepest_descent 函數接受一個初始點 initial_x、一個學習率 learning_rate 和一個疊代次數 num_iterations,並使用這些參數來執行最速下降法。在每一輪疊代中,算法計算梯度,並使用梯度來更新點 x

請注意,這個示例中的函數是一個簡單的二次函數,它的梯度始終是常數。在實際應用中,函數和梯度通常需要通過數值積分或自動微分來計算。此外,學習率 learning_rate 需要適當調整,以確保算法能夠有效地朝著最小值移動。

最速下降法的一個常見問題是它可能會陷入局部最小值,而不是全局最小值。這通常是由於梯度為零的點不一定是全局最小值。在實際應用中,通常會結合其他技術(如線性搜尋、動態學習率調整或更複雜的優化算法)來解決這個問題。