最速下降法matlab
最速下降法是一種最佳化算法,用於求解函式的最小化問題。在 MATLAB 中,可以使用以下步驟實現最速下降法:
- 定義目標函式和約束條件。
- 初始化變數,包括初始點、步長、疊代次數等。
- 開始疊代,每次疊代選擇一個點作為新的搜尋點,根據目標函式的梯度方向進行搜尋,並更新當前點。
- 判斷是否達到預設的疊代次數或目標函式值是否滿足要求,如果滿足則停止疊代,否則返回第 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)
。