数学建模理论学习:线性规划模型

三要素:目标函数、约束条件(s.t.)、决策变量(x)

目标函数:z = ax1 + bx2 + cx3 + ...

其中c为一个序列,从左到右依次从x1到xn的系数

解决下面的线性规划问题:

% 目标函数系数:-x1 - 2x2
f = [-1; -2]; 

% 不等式约束 Ax <= b
% A向量表示决策变量的系数,B向量表示的是对应的条件,若不符合Ax <= b需进行初等变换
A = [1, 1; 2, 1; 1, 2];
b = [2; 3; 3];

% 等式约束 Aeq x = beq(如果没有等式约束,则设置为空矩阵)
Aeq = [];
beq = [];

% 变量下界和上界(如果没有界限约束,可以设置为空数组)
% lb表示决策变量的下界, ub表示决策变量的上界
lb = zeros(2, 1);
ub = [];

% 调用 linprog 函数
[x, fval, exitflag, output] = linprog(f, A, b, Aeq, beq, lb, ub);

% 显示结果
disp('最优解 x:')
disp(x)
disp('最优目标函数值 fval:')
disp(fval)
disp('退出标志 exitflag:')
disp(exitflag)
disp('输出信息 output:')
disp(output)

linprog函数:

[x, fval, exitflag, output] = linprog(f, A, b, Aeq, beq, lb, ub, options)

 

用linprog函数只能求解目标函数的最小值,如果我们需要求解最大值则需要加上符号变换一下即可:

% 建立目标函数
f = [-4, -3];

% 建立约束条件
% Ax <= B
A = [2,1;1,1;0,1];
b = [40;8;7];
% A1x1 + A2x2 = B
Aeq = [];
Beq = [];
% x1, x2 的公共上界下界
lb = zeros(2,1);
ub = [];

% 设置优化选项
options = optimoptions('linprog', 'Display', 'iter');

% 求解线性规划结果
[x, fval, exitflag, output] = linprog(f, A, b, Aeq, Beq, lb, ub);
fval = -fval;

% 输出结果
disp('最优解:')
disp(x)
disp('最优函数值:')
disp(fval)
disp(exitflag)
disp(output)

以下是对该目标函数的图像:

% 建立目标函数
f = [-4, -3];

% 建立约束条件
A = [2, 1; 1, 1; 0, 1];
b = [40; 8; 7];

% 变量下界
lb = zeros(2, 1);

% 求解线性规划问题
[x, fval, exitflag, output] = linprog(f, A, b, [], [], lb, []);

% 将最小化结果转换为最大化结果
fval = -fval;

% 设置绘图范围
% 0 - 10 400个等间隔点的向量
x1 = linspace(0, 10, 400);
x2 = linspace(0, 10, 400);
% 0-10的正方形区间画等高线:
% 利用x1和x2两个向量声场两个400 * 400的矩阵X1, X2
[X1, X2] = meshgrid(x1, x2);

% 计算目标函数值
Z = 4*X1 + 3*X2;

% 绘制等高线
% 创建新的图形窗口
figure;
% 在指定范围内绘制20条等高线
contour(X1, X2, Z, 20); hold on;

% 绘制约束条件
% 根据约束条件总结出约束范围:
fill([0, 0, 20, 20], [7, 0, 0, 7], 'b', 'FaceAlpha', 0.1); % x2 <= 7
fill([0, 8, 0], [8, 0, 0], 'g', 'FaceAlpha', 0.1); % x1 + x2 <= 8
fill([0, 20, 0], [0, 0, 40], 'r', 'FaceAlpha', 0.1); % 2x1 + x2 <= 40

% 标记最优解
% MarkSize 标记点的大小 MarkFaceColor 标记点的颜色
plot(x(1), x(2), 'ro', 'MarkerSize', 10, 'MarkerFaceColor', 'r');

% 标注和图例
xlabel('x1');
ylabel('x2');
title('线性规划问题的目标函数与约束条件');
legend('目标函数等高线', 'x2 <= 7', 'x1 + x2 <= 8', '2x1 + x2 <= 40', '最优解');
% 显示网格:
grid on;
% 取消绘图保持状态,使得下一次绘图会清除当前图形内容
hold off;

若目标函数不是线性函数:

例子:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/729047.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

信息打点web篇----web后端源码专项收集

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 专栏描述&#xff1a;因为第一遍过信息收集的时候&#xff0c;没怎么把收集做回事 导致后来在实战中&#xff0c;遭遇资产获取少&#xff0c;可渗透点少的痛苦&#xff0c;如今决定 从头来过&#xff0c;全面全方位…

AI创作在论文写作中扮演什么角色?

近年来&#xff0c;随着科技的快速发展&#xff0c;AI已经逐渐渗透到了生活中的方方面面&#xff0c;其中也包含着学术领域。 作为学生党&#xff0c;你是否还在为期末论文&#xff0c;大学生实践报告而发愁&#xff1f; 有了这些AI写作神器&#xff0c;大学生们再也不用在期…

实验一:Ubuntu系统中的USB设备绑定实验

实验一&#xff1a;Ubuntu系统中的USB设备绑定实验 一、实验目的二、实验原理三、实验环境四、实验步骤任务 1&#xff1a;绑定不同USB设备任务 2&#xff1a;绑定多个相同设ID的串口设备 五、注意事项六、拓展练习 一、实验目的 学习Ubuntu中USB设备命名方法&#xff1b;掌握…

北航数据结构与程序设计图部分选填题

一、 抓两个关键信息&#xff1a;无向图&#xff0c;邻接表。无向图中&#xff0c;边&#xff08;vi&#xff0c;vj&#xff09;要在vi的链表中记录一次&#xff0c;再以&#xff08;vj&#xff0c;vi&#xff09;的形式在vj的链表中记录一次。 每个边都要记录两次&#xff0c…

Ubuntu安装qemu-guest-agent

系列文章目录 Ubuntu-24.04-live-server-amd64安装界面中文版 Ubuntu-24.04-live-server-amd64启用ssh Ubuntu乌班图安装VIM文本编辑器工具 文章目录 系列文章目录前言一、安装二、启用服务三、效果总结 前言 QEMU Guest Agent&#xff08;简称QEMU GA或QGA&#xff09;在虚拟…

基于 Arm 虚拟硬件的心电图(ECG)疾病分类应用开发实战

基于 Arm 虚拟硬件的心电图(ECG)疾病分类应用开发实战 目录 文章目录 [toc] 一、实验背景1. 嵌入式软件开发的基本流程2. Arm 虚拟硬件镜像产品简介 二、实验目标三、实验步骤简介四、实验前准备1. 订阅使用 Arm 虚拟硬件镜像的百度智能云云服务器 BCC 实例1.1 百度智能云账号准…

Ubuntu 安装 CloudCompare

步骤&#xff1a; sudo apt install flatpakflatpak install flathub org.cloudcompare.CloudCompare此时会有报错&#xff1a; error: No remote refs found similar to ‘flathub’执行 flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.fla…

[深度学习]--分类问题的排查错误的流程

原因复现&#xff1a; 原生的.pt 好使&#xff0c; 转化后的 CoreML不好使&#xff0c; 分类有问题。 yolov8 格式的支持情况 Format Argument Suffix CPU GPU 0 PyTorch - .pt True True 1 Tor…

STM32多种开发环境及生成hex及bin文件介绍

一.STM32开发环境 KEIL系列 &#xff08;1&#xff09;KEIL公司目前有四款独立的嵌入式软件开发工具&#xff0c;即MDK、KEIL C51、KEIL C166、KEIL C251&#xff0c;它们都是KEIL公司品牌下的产品&#xff0c;都基于uVision集成开发环境&#xff0c;其中MDK是RealView系列中…

初阶 《数组》 3. 数组越界

3. 数组越界 数组的下标是有范围限制的。 数组的下规定是从0开始的&#xff0c;如果数组有n个元素&#xff0c;最后一个元素的下标就是n-1。 所以数组的下标如果小于0&#xff0c;或者大于n-1&#xff0c;就是数组越界访问了&#xff0c;超出了数组合法空间的访问。 C语言本身…

在Mac上恢复丢失或未保存的Word文档的5种有效方法

“救命&#xff01;我想在Mac上恢复丢失的Word文档。就在 1 小时前&#xff0c;我错误地删除了它们&#xff0c;并清空了垃圾桶。这些Word文档对我来说非常重要。我不知道如何恢复它们&#xff0c;谁能帮我&#xff1f;提前致谢&#xff01; 没有什么比忘记保存 Word 文档或在…

openEuler搭建hadoop 伪分布式集群

openEuler搭建hadoop 伪分布式集群 Mode 伪分布式 hadoop101hadoop102hadoop103192.168.10.101192.168.10.102192.168.10.103namenodesecondary namenoderecource managerdatanodedatanodedatanodenodemanagernodemanagernodemanagerjob historyjob logjob logjob log 升级软…

C语言之顺序结构以及程序调试的debug宏

一&#xff1a;C语言中的顺序结构 1:最浅显的顺序结构理解&#xff1a;三种结构之一 &#xff08;1&#xff09;代码执行的时候没有遇到判断跳转或者循环&#xff0c;默认是顺序执行的。执行完上一句则开始执行下一句。 &#xff08;2&#xff09;顺序结构说明cpu的工作状态&a…

springboot基于Web的社区医院管理服务系统 LW+ PPT+源码+讲解

3系统需求分析 3.1系统功能 通过前面的功能分析可以将社区医院管理服务系统的功能分为管理员、用户和医生三个部分&#xff0c;系统的主要功能包括首页、个人中心、用户管理、医生管理、预约医生管理、就诊信息管理、诊疗方案管理、病历信息管理、健康档案管理、费用信息管理…

【Linux】ss 命令使用详解

目录 一、ss命令介绍 二、ss命令格式和使用 1、命令格式 2、ss命令的常用选项 3、命令的常见用法 3.1 找出打开套接字/端口应用程序 3.2 检查系统的监听套接字 3.3 显示所有状态为established的SMTP连接 3.4 查看建立的 TCP 连接 3.5 通过 -r 选项解析 IP 和端口号 …

【YOLOv5/v7改进系列】引入特征融合网络——ASFYOLO

一、导言 ASF-YOLO结合空间和尺度特征以实现精确且快速的细胞实例分割。在YOLO分割框架的基础上&#xff0c;通过引入尺度序列特征融合(SSFF)模块来增强网络的多尺度信息提取能力&#xff0c;并利用三重特征编码器(TFE)模块融合不同尺度的特征图以增加细节信息。此外&#xff…

《Windows API每日一练》5.2 按键消息

上一节中我们得知&#xff0c;Windows系统的按键消息有很多类型&#xff0c;大部分按键消息都是由Windows系统的默认窗口过程处理的&#xff0c;我们自己只需要处理少数几个按键消息。这一节我们将详细讲述Windows系统的所有按键消息及其处理方式。 本节必须掌握的知识点&…

高清无字幕搞笑视频素材去哪里找哪里下载的?

在制作搞笑视频时&#xff0c;优质的无字幕视频素材对于提升作品的趣味性和吸引力至关重要。今天&#xff0c;我将为大家介绍一系列高清视频素材网站&#xff0c;这些网站不仅资源丰富、质量上乘&#xff0c;还能助你一臂之力&#xff0c;迅速提升视频的创意和品质。首先要推荐…

DP:完全背包+多重背包问题

完全背包和01背包的区别就是&#xff1a;可以多次选 一、完全背包&#xff08;模版&#xff09; 【模板】完全背包_牛客题霸_牛客网 #include <iostream> #include<string.h> using namespace std; const int N1001; int n,V,w[N],v[N],dp[N][N]; //dp[i][j]表示…

IDEA 学习之 打开一个 MAVEN 工程

目录 1. 单体工程2. 多 module 工程3. 多个多 module 工程3.1. 重复 1 步骤3.2. 添加其他多 module 工程 1. 单体工程 2. 多 module 工程 3. 多个多 module 工程 3.1. 重复 1 步骤 3.2. 添加其他多 module 工程