matlab二分法求极小值源代码
时间: 2024-10-09 07:08:21 浏览: 54
matlab二分法求根
MATLAB是一种强大的数值计算环境,其中二分法(也称为黄金分割搜索)用于寻找函数的局部最小值。以下是一个简单的MATLAB代码示例,展示了如何使用二分法求解一元函数的极小值:
```matlab
function [x_min, f_min] = binary_search_min(f, a, b, tol)
% 输入参数
% f:目标函数,接受一个输入并返回一个标量值
% a 和 b:初始搜索区间的左右端点
% tol:允许的误差容忍度
% 检查区间是否为空
if b <= a
error('Search interval must be non-empty.');
end
% 设置中间点和循环条件
c = (a + b) / 2;
iter = 0;
while abs(b - a) > tol && f(c) ~= f(a)
% 更新迭代计数
iter = iter + 1;
% 判断左半部分还是右半部分更接近最小值
if f(c) < f(a)
b = c; % 逼近较小那一侧
else
a = c; % 逼近较大那一侧
end
% 更新中间点
c = (a + b) / 2;
end
% 返回找到的最小值及其位置
x_min = c;
f_min = f(x_min);
end
% 示例使用
f = @(x) x.^2 - 4; % 构造一个二次函数作为例子
[a, b] = deal(-5, 5); % 定义搜索范围
[x_min, f_min] = binary_search_min(f, a, b, 1e-6);
disp(['Minimum found at x = ', num2str(x_min), ' with value f(x_min) = ', num2str(f_min)]);
```
这个函数首先检查区间是否有效,然后通过不断缩小搜索区间(每次将区间平分为两半)直到满足精度要求或两侧函数值相等为止。最后,返回找到的最小值和对应的x值。
阅读全文