You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Matlab中求解闭区间[0,1]上的非线性函数最小值

闭区间[0,1]上非线性函数最小值求解方案

核心逻辑

fminbnd仅在开区间(0,1)内搜索局部极值,但闭区间的最小值可能出现在区间内部或两个端点(x=0、x=1)。因此需要同时计算这三类点的函数值,再比较得出全局最小值。

完整实现代码

% 定义目标函数
width_shape_function = @(xV)(1.6 * ((1 - 0.501237175635373 * (xV^1.23642575949947))^1.99283778776976)); 

% 1. 获取开区间内的极值点及对应函数值
[x_inner, f_inner] = fminbnd(width_shape_function, 0, 1.0);
x_inner = vpa(x_inner, 20);
f_inner = vpa(f_inner, 20);

% 2. 计算两个端点的函数值
f_0 = vpa(width_shape_function(0), 20);
f_1 = vpa(width_shape_function(1), 20);

% 3. 比较所有候选值,确定闭区间上的最小值
% 整理候选点集合
candidates = [
    struct('x', 0, 'f', f_0);
    struct('x', x_inner, 'f', f_inner);
    struct('x', 1, 'f', f_1)
];

% 筛选函数值最小的点
[min_f, min_idx] = min([candidates.f]);
min_x = candidates(min_idx).x;

% 输出结果
fprintf('闭区间[0,1]上的最小值点:%s\n', char(min_x));
fprintf('对应的最小值:%s\n', char(min_f));

关键说明

  • 必须验证端点函数值:部分非线性函数的全局最小值恰好落在区间端点,而fminbnd不会主动检查这些位置
  • 保持精度一致性:用vpa保留20位有效数字,与原代码的精度要求匹配
  • 多局部极值场景:如果函数在区间内存在多个局部极值,fminbnd可能仅找到其中一个。此时可考虑替换为全局优化工具(如fminsearch),但单变量场景下,端点+内部极值的对比已覆盖闭区间所有可能的最小值候选点

内容的提问来源于stack exchange,提问作者iKD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 18:05:13