数学建模:非线性规划:凸规划问题

一、定义

凸集定义​​:设Ω是n维欧氏空间的一点集,若任意两点x₁∈Ω,x₂∈Ω,其连线上的所有点αx₁+(1-α)x₂∈Ω,(0≤α≤1),则称Ω为凸集。

​凸函数定义​​:给定函数f(x)(x∈D⊂Rⁿ),若∀x₁,x₂∈D,λ∈[0,1],有

f(λx₁+(1-λ)x₂) ≤ λf(x₁)+(1-λ)f(x₂)

则称f(x)为D上的凸函数;若不等式严格成立,则称为严格凸函数。



二、性质

 最优性特征

  1. ​局部最优即全局最优​​:凸规划的任一局部最优解都是全局最优解

  2. ​最优解集为凸集​​:若最优解存在,则所有最优解构成的集合是凸集

  3. ​严格凸函数的唯一性​​:当目标函数f(x)为严格凸函数时,最优解唯一

判别条件

三、用内点法解决凸规划问题

内点法通过在可行域内部构造一条路径并沿着这条路径向最优解逼近。其核心特征包括:

​障碍函数​​:将约束条件转化为目标函数的惩罚项

中心路径​​:定义一系列严格可行解的参数化路径

​牛顿迭代​​:利用二阶导数信息快速逼近最优解

代码

clear
clc

prob = optimproblem;

%用optimvar函数定义优化变量x,包含2个元素,且设置下界为0(x₁,x₂ ≥ 0)
x = optimvar('x', 2, 'LowerBound', 0);

%定义目标函数f(x) = x₁² + x₂² -4x₁ +4
prob.Objective = x(1)^2 + x(2)^2 - 4*x(1) + 4;

%定义第一个不等式约束:-x₁ + x₂ ≤ 2
con1 = -x(1) + x(2) - 2 <= 0;

%定义第二个不等式约束:x₁² -x₂ +1 ≤ 0
con2 = x(1)^2 - x(2) + 1 <= 0;

%将约束条件添加到问题中
prob.Constraints.con1 = con1;
prob.Constraints.con2 = con2;

%设置初始点为随机值(2维列向量)
x0.x = rand(2,1);

%配置优化选项(使用内点法)
options = optimoptions('fmincon', 'Algorithm', 'interior-point',...
                      'Display', 'iter');

%求解凸规划问题
[sol, fval, exitflag, output] = solve(prob, x0, 'Options', options);

% 最优解输出
fprintf('\n最优解:\n');
fprintf('x₁ = %.4f, x₂ = %.4f\n', sol.x(1), sol.x(2));
fprintf('目标函数最小值: %.4f\n', fval);

% 约束条件验证输出
fprintf('\n约束条件验证\n');
con1_val = -sol.x(1) + sol.x(2) - 2;
con2_val = sol.x(1)^2 - sol.x(2) + 1;
fprintf('约束1 (-x₁ + x₂ ≤ 2): %.4f (满足)\n', con1_val);
fprintf('约束2 (x₁² -x₂ +1 ≤ 0): %.4f (满足)\n', con2_val);
fprintf('非负约束: x₁=%.4f ≥0, x₂=%.4f ≥0\n', sol.x(1), sol.x(2));

运行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值