最速下降法matlab

最速下降法是一種最佳化算法,用於求解函式的最小化問題。在 MATLAB 中,可以使用以下步驟實現最速下降法:

  1. 定義目標函式和約束條件。
  2. 初始化變數,包括初始點、步長、疊代次數等。
  3. 開始疊代,每次疊代選擇一個點作為新的搜尋點,根據目標函式的梯度方向進行搜尋,並更新當前點。
  4. 判斷是否達到預設的疊代次數或目標函式值是否滿足要求,如果滿足則停止疊代,否則返回第 3 步。

下面是一個簡單的 MATLAB 代碼示例,用於實現最速下降法求解函式最小化問題:

function [x, fval] = gradient_descent(fun, x0, tol, max_iter)
% fun: 目標函式
% x0: 初始點
% tol: 疊代精度
% max_iter: 最大疊代次數

    x = x0;
    fval = fun(x);
    d = -gradient(fun, x); % 計算目標函式的梯度
    for i = 1:max_iter
        x_new = x - d * (1 / length(d)) * stepsize(x); % 更新搜尋點
        fval_new = fun(x_new); % 計算新的目標函式值
        if abs(fval_new - fval) < tol % 判斷是否達到疊代精度
            break;
        end
        fval = fval_new; % 更新當前目標函式值
        x = x_new; % 更新當前點
    end
end

其中,fun 是目標函式,x0 是初始點,tol 是疊代精度,max_iter 是最大疊代次數。在每次疊代中,根據目標函式的梯度方向進行搜尋,並更新當前點和目標函式值。當達到預設的疊代次數或目標函式值滿足要求時,算法停止。

使用該函式時,需要傳入目標函式、初始點、疊代精度和最大疊代次數等參數。例如:

fun = @(x) x.^2; % 定義目標函式為 x^2
x0 = 1; % 初始點為 1
tol = 1e-6; % 疊代精度為 1e-6
max_iter = 100; % 最大疊代次數為 100
[x, fval] = gradient_descent(fun, x0, tol, max_iter); % 進行最速下降法求解最小化問題
disp(['最小化結果:x = ', num2str(x), ', f(x) = ', num2str(fval)]);

這將輸出最小化結果 x 和對應的目標函式值 f(x)