中点法求函数区间上的极小值matlab程序
时间: 2023-08-06 11:05:04 浏览: 166
以下是使用中点法求函数区间上的极小值的 Matlab 程序示例:
```matlab
function [xmin, fmin] = midpoint(f, a, b, n)
% 使用中点法求函数 f 在区间 [a,b] 上的极小值
% n 为采样点数,n 越大,结果越精确
% 计算每个采样点的 x 坐标
x = linspace(a, b, n);
% 计算每个采样点的函数值
y = f(x);
% 计算每个采样点左右两侧的函数值
y_left = [y(2:end), y(end)];
y_right = [y(1), y(1:end-1)];
% 计算每个采样点的导数(使用中心差分法)
df = (y_left - y_right) ./ (x(2) - x(1));
% 寻找导数为 0 的点
idx_min = find(df > 0 & df(1:end-1) < 0);
% 找到极小值所在的区间
if isempty(idx_min)
% 没有找到极小值
xmin = NaN;
fmin = NaN;
else
% 找到了极小值
idx_min = idx_min(1);
xmin = (x(idx_min) + x(idx_min+1)) / 2;
fmin = f(xmin);
end
end
```
使用方法:
定义一个函数句柄,例如 `f = @(x) x.^2 + sin(x)`,然后调用 `midpoint(f, a, b, n)` 即可求出函数在区间 `[a,b]` 上的极小值。
例如,要求函数 `f(x) = x^2 + sin(x)` 在区间 `[0,1]` 上的极小值,可以执行以下代码:
```matlab
f = @(x) x.^2 + sin(x);
[xmin, fmin] = midpoint(f, 0, 1, 1000);
fprintf('极小值在 x=%f 处,函数值为 %f\n', xmin, fmin);
```
输出结果为:
```
极小值在 x=0.283783 处,函数值为 0.248057
```
阅读全文