IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 【MPC】②quadprog求解正定、半正定、负定二次规划 -> 正文阅读

[数据结构与算法]【MPC】②quadprog求解正定、半正定、负定二次规划


在这里插入图片描述

一、概述

第一期文章已经详细介绍,二次规划问题和matlab的quadprog函数的使用方法,详情可见:quadprog函数详解。在二次规划问题中,根据海森矩阵的正定性,二次规划问题可以分为严格凸、凸、非凸二次型问题。为了验证,matlab的quadprog函数对三种二次型问题的求解能力,本文生成各种类型的海森矩阵,并尝试用quadprog进行求解。

二、Matlab验证

(一)海森正定、半正定、负定矩阵生成

海森矩阵首先需要满足矩阵对称性,同时根据特征值判定矩阵的正定性。因此,为了简单起见直接生成对角阵进行验证。

H_posi=diag([1,2,3]);
H_semi=diag([0,2,3]);
H_nega=diag([-1,-2,-3]);

(二)矩阵正定性验证

矩阵正定性判断:主要是利用eig函数求解矩阵的特征值,并判单特征值的正负。

% 判断矩阵m是正定、半正定还是负定
% 需要输入矩阵m
% 例如:m = [2 -1; -1 2]; 

if issymmetric(m) % 检查矩阵是否对称
    % disp('矩阵对称');
    d = eig(m); % 计算矩阵特征值
    if all(d > 0)
        disp('矩阵正定');
    elseif all(d >= 0)
        disp('矩阵半正定');
    else
        disp('矩阵负定');
    end
else
    disp('矩阵不对称');
end

(三)各类型二次型求解程序

clear;clc;
H_posi=diag([1,2,3]);
H_semi=diag([0,2,3]);
H_nega=diag([-1,-2,-3]);

A = [1 1 1; -1 2 1; 2 1 1];
b = [2; 2; 3];
f = [2;-3;1];
lb = zeros(3,1);
ub = ones(size(lb));
Aeq = ones(1,3);
beq = 1/2;
x_posi = quadprog(H_posi,f,A,b,Aeq,beq,lb,ub)
x_semi = quadprog(H_semi,f,A,b,Aeq,beq,lb,ub)
x_nega = quadprog(H_nega,f,A,b,Aeq,beq,lb,ub)

三、求解结果

三种类型的二次规划问题,quadprog函数均能求解。但是非凸情况,会有非凸函数提示。
在这里插入图片描述

找到满足约束条件的最小值。
优化完成,因为目标函数在可行的方向上是不递减的。 在可行的方向上不减少,在最优性容许值内。
并且约束条件在约束条件容许值内得到满足。 <停止标准的详细信息>

四、quadprog算法选择

quadprog求解器包含三种二次规划算法,可以使用 optimoptions 配置 Algorithm 选项。

  • ‘interior-point-convex’(默认值)
  • ‘trust-region-reflective’
  • 'active-set

算法选择原则

  • 如果您遇到凸问题,或不知道您的问题是否为凸问题,请使用 ‘interior-point-convex’。
  • 如果您的非凸问题只有边界或只有线性等式约束,请使用 ‘trust-region-reflective’。
  • 如果您有具有大量线性约束而没有大量变量的半正定问题,请尝试 ‘active-set’。
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-07-03 11:03:35  更:2022-07-03 11:07:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 23:24:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码