主要用的是 fminbnd 和 fminsearch 这两个函数。
首先定义函数(要定义为【函数句柄】类型)
%% 定义函数
clear;clc;
f = @(x) - 1 ./ ((x - 0.3) .^ 2 + 0.01) - 1 ./ ((x - 0.9).^2 + 0.04) + 6
% 绘制图像
x = -1:0.01:2;
y = f(x);
plot(x, y)
目测此函数的两个极小值分别在0.3和0.9附近
① fminbnd
%% fminbnd 函数的使用
% x = fminbnd(fun,x1,x2) 返回一个值 x,该值是 fun 中描述的标量值函数在区间 x1 < x < x2 中的局部最小值。
min1 = fminbnd(f, 0, 0.5);
min2 = fminbnd(f,0.5,1); % 这里返回的是x轴坐标
disp(['fminbnd: ',num2str(min1),' and ',num2str(min2)])
运行结果:
fminbnd: 0.30039 and 0.89273
② fminsearch
%% fminsearch 函数的使用
% x = fminsearch(fun,x0) 在点 x0 处开始并尝试求 fun 中描述的函数的局部最小值 x。
min1 = fminsearch(f, 0.3);
min2 = fminsearch(f, 2);
disp(['fminsearch: ',num2str(min1),' and ',num2str(min2)])
运行结果:
fminsearch: 0.30035 and 0.89268
(由于算法不同,两个函数返回结果略有差别)