中点法求函数区间上的极小值matlab程序
时间: 2023-08-06 10:05:26 浏览: 31
以下是使用中点法求函数区间上的极小值的MATLAB程序:
```matlab
function [xmin, fmin] = midpoint_method(f, a, b, tol)
% f: 目标函数
% a, b: 区间
% tol: 容差
% 初始化参数
n = 1;
h = (b - a);
x1 = a + h/2;
x2 = b - h/2;
f1 = f(x1);
f2 = f(x2);
% 迭代过程
while h > tol
if f1 < f2
b = x2;
x2 = x1;
f2 = f1;
h = (b - a);
x1 = a + h/2;
f1 = f(x1);
else
a = x1;
x1 = x2;
f1 = f2;
h = (b - a);
x2 = b - h/2;
f2 = f(x2);
end
n = n + 1;
end
% 返回结果
xmin = (a + b)/2;
fmin = f(xmin);
end
```
使用方法:
1. 定义目标函数 `f`;
2. 定义区间 `[a, b]` 和容差 `tol`;
3. 调用 `midpoint_method` 函数并传入参数 `f`, `a`, `b`, `tol`;
4. 函数会返回极小值 `xmin` 和对应的函数值 `fmin`。
例如,对于函数 $f(x) = x^2 - 4x + 4$ 在区间 $[0, 5]$ 上求极小值,容差为 $10^{-6}$,可以按照以下步骤进行:
```matlab
f = @(x) x^2 - 4*x + 4;
a = 0;
b = 5;
tol = 1e-6;
[xmin, fmin] = midpoint_method(f, a, b, tol);
disp(xmin);
disp(fmin);
```
输出结果为:
```
2.0000
-8.8818e-16
```
其中,$xmin=2$ 是函数的极小值,$fmin=-8.8818\times 10^{-16}$ 是函数在极小值处的函数值。