数学建模--深入剖析线性规划(模型全方位解读+代码分析)

1.简介

(1)线性规划三要素

(2)模型适用赛题

2.典例讲解


(1)问题分析

目标函数是净收益尽可能大,风险尽可能小;

                           约束条件是交易费的分段函数,以及每一笔投资都是非负数;


(2)模型假设

模型假设是我们进行建模的时候必须要进行的,我们应该逐步地学习;对于这道题目,我们首先要理清各个变量的意义,以及不同变量之间的各种关系;这个里面的交易费是一个分段函数,我们的投资小于一个指定的数字的时候,需要付对应的交易费,大于这个数字的时候,只需要按照一定的比率进行付交易费即可,这个指定的数据就是ui,我们举一个很简单的例子,我们的投资以100作为分界线,当我们投资20的时候,我们就要付交易费20,但是如果我们投资是2000(任意大于20的数字,就只需要按照一定的比率付交易费,也就是说不同的投资,我们的交易费的计算方法是不一样的;

我们上面的假设的意义何在呢?假设每一笔交易的投资金额足够大,我们就只需要按照一定的费率付交易费,这样就把原来的分段函数的两种情况变成了只有现在的一种情况,这样就简化了我们的模型,这就是模型假设的意义,相信你已经get到了!

(3)模型建立

我们上面已经看到了4种投资方案对应的相应的数据,我们下面进行模型的建立;

我们前面已经提到了目标函数和约束条件,下面我们将这些文字语言转换为数学语言;


我们的目标函数就是总利润最大:xi就是每个项目的投资,例如x1就是第一个项目的投资,x1*r1就是投资乘上平均的收益率,得到的就是对应的收益,因为我们还有付的交易费x1*p1就是第一个项目投资的交易费,x1*r1-x1*p1就是我们的第一个项目投资净赚的利润,依次分别计算其他的三个项目的投资,最后求和就是我们的净收益;(但是实际上这里的i是从0开始的,不知道你有没有注意到(我最开始没有注意到),这个就是我们的4个项目的利润收益加上我们的剩下的资金x0,因为x0是不存在交易费的,这个x0是存在银行里面有利息的,所以我们可以直接加上对应的利息,相当于这个收益是前四个项目的收益加上我们这个时候剩下的资金存银行产生的利息);


我们的目标函数还要求总体的风险尽可能小,我们也要分别计算单个项目的投资的风险最后相加,那么单个项目的投资的风险如何计算呢?为什么下面的图片里面又是max又是min,我们应该如何进行理解呢?


这里的max显然是最小值,我们的4种投资都有对应的风险,我们分别计算4种方案的投资风险,在这四个投资风险里面求得最大值(比如我们计算之后发现第3种是风险最大),这个最大值就说明这4个投资里面,3号投资的风险对我们的整个投资的影响最大,我们可以简单地认为只要3好的风险最小,我的这4项投资的风险就最小(这里显然是不够严谨的,但是我们还是忽略了这个误差,有些时候,想要得到精确的解,我们就要付出更大的代价,我们要比较付出的代价是否值得,这里我们认为是没必要的,只要把最大的单个项目的风险降低到最低,我们就近似地认为这4个项目的风险就是最低的),最后我们对这个单个项目的风险求最小值;

约束条件就是我们的投资加上我们的交易费的和等于我们的全部资金,因为我们的资金一部分是投资的,剩下的就是投资的过程中需要付的交易费;xi就是每个项目所投的资金必须是大于0的;

(4)模型简化

合理的模型简化,可以让我们对于模型的求解事半功倍,相信你已经意识到了,前面的分别计算4种投资的风险,取最大值,再求其最小值,让人很不舒服,很对小伙伴难以理解;下面我们对这个目标函数进行简化进而简化我们的模型;

我们假设风险率小于某个确定的值,就是为这个总风险最小,这个确定的值就是a,我们表示出风险率使之小于a,这样简化之后,你就会发现,我们的目标函数,从原来的两个到现在的一个,这个投资风险就变成了一个约束条件,只要求表示的投资风险小于我们的a即可;

经过这个简化之后,我们的模型就是一个目标函数(总的收益最大)和3个约束条件(风险小于这个特定的常数,交易费和我们投入的资金两者的和等于总资金,每一项的投资都是非负数)-----这个就是单目标的线性规划模型;

(也许看到这里,你会觉得,这个模型简化也太神奇了吧,我怎么可能想得到,这个时候,千万不要灰心,我们现阶段只需要理解即可,熟能生巧,数模的学习不能急于求成);

(5)模型改进

我们前面已经提到,不同的人进行投资的时候,所能够承担的风险肯定是不一样的,显示投资里面的a肯定是一个变量,我们在MATLAB调用对应的函数的时候需要这个a是一个常量才可以带入函数,这个时候我们在论文里面写作“模型改进”;

具体的做法就是每次计算的时候,代入的a的值是不一样的,但是我们的模型里面的a是一个常数,我们实际代入的时候把a当作一个变量进行带入;小伙伴们要理解这个思路。 

3.模型求解

(1)对MATLAB函数的介绍

理解标准型,把我们的目标函数化为标准型;MATLAB函数使用的时候,我们输入的变量必须是标准型才可以进行求解,标准形是求最小值,我们想要求解的目标函数是净收益的最大值,我们只需要加负号就可以了,具体的操作如下图所示:

(2)函数的参数的介绍

数据来源,计算的时候不要直接拿表格里面的数据运算,后面还是有一个百分号的呦!

下面的就是这个函数进行调用的时候需要使用到的几个对应的参数:

f:计算的就是pi-r1,这里一定要切记后面的百分号,例如,第一个就是银行的p1(交易费0)减去平均收益率(也就是利息0.05)就是图里面的-0.05,第2个是1%-28%即,0.01-0.28=-0.27,依次计算;

A:显然,这个是一个4行5列的矩阵,我们首先要清楚的是这个矩阵的行数和列数分别代表的是什么;A计算的就是对应的风险率;行数4表示的是这4个项目,虽然有5个变量,但是银行存款生利息是没有风险的,所以我们只用这个矩阵的4行分别表示x1,x2,x3,x4;每一行有5个数据,这5个数代表的就是风险损失率,第一个项目的风险就是2.5%,和其他的没有关系,因为我们有5个变量,所以我们写了每行是5个值,如果没有体现这个变量,我们就在对应的位置写上0即可;

b:就是对应的风险,我们模型里面不是把这个风险a设置为常数吗,我们先是让a等于0.05,然后是每次计算换其他的值;所以b这个列向量就是4个0.05;

Aeq:代表的就是第二个约束条件,1加上交易费率,因为银行的没有交易费,所以直接是1,其他的四个都要加上对应的交易费率;

Beq就是我们的M,即总共的资金,我们记作1;

lb:就是每个投资都是非负数,我们的lb就是最小值,即0;最大值其实就是不超过我们的全部资金,即最大值1,但是因为我们前面的约束条件之下,这个单个项目的投资不可能是1,所以这个地方写不写都不会有任何的影响;

(3)MATLAB代码

我们试着理解一下:代码里有一部分就是我们前面分析的过程;

1.clc,clear是清空之前定义的一些变量,防止不必要的报错;

2.zeros(4,1)是生成4行一列的0矩阵,diag是对角矩阵(线性代数知识);

3.LB是5行1列的列向量,全部是0;

4.Q就是净收益,我们还没计算,先定义了一个空的向量,最后把计算的结果放进去即可;

5.循环里面相当于是循环了51次,就是a是以0开始,使用0.001作为步长,以0.5结束,进行求解的,所以是循环了51次,b就是每次循环的时候对应的不同的风险率,4行1列的矩阵;之后调用函数linprog传参求解,MATLAB标准型求的是最小值,我们的循环第四行取相反数得到的是最大值,Q就是最大的投资收益,XX就是对应不同的项目的具体投资金额;

我们通过工作区点击对应的变量就可以查看对应的矩阵,点击xx就可以看到对应每次循环的时候,具体的不同的投资方案;

6.最后的三行就是作图部分的一些命令plot绘制平面坐标轴,*r就是坐标曲线的一种表示的形式,例如是实现还是虚线,使用点还是圆圈,或者是星号,这些等等都有对应的表示方法,读者可以自行的进行了解;

图像:

感兴趣的小伙伴下去可以自行尝试:

clc,clear;
a=[0:0.001:0.05];
f=[-0.05,-0.27,-0.09,-0.185,-0.185];
A=[zeros(4,1),diag([0.025,0.015,0.055,0.026])];
Aeq=[1,1.01,1.02,1.045,1.065];
beq=1;
LB=zeros(5,1);
Q=zeros(1,length(a));
XX=[];
for i=1:length(a);b=a(i)*ones(4,1);[x,y]=linprog(f,A,b,Aeq,beq,LB);Q(i)=-y;XX=[XX;x'];
end
plot(a,Q,'*r')
xlabel('风险率')
ylabel('最大收益')

(4)结果分析

这个计算的结果只是粗略值(不同的软件有偏差),具体的方案:

不同的项目投资金额:可在工作区里面的xx查看;(对应的单位是万元,我们看到的结果要乘上1000才是真正的结果)

总的净收益Q可在工作区查看;Q是1*51的向量,可以观察到最后的时候收益就已经不变了,和我们的图像结果是吻合的;

能够看到这里,我相信你一定有所收获,上面的文字均是自己的理解,自己的语言,希望能帮助到你,对于任何问题,欢迎在评论区和我交流,感谢!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何使用Fiddler做弱网测试?

1、打开Fiddler工具,点击Rules-Customize Rules 2、打开了一个配置文件,ctrlF搜索Delay sends by 300ms per KB uploaded, 3、修改发送延迟和下载延迟的时间,可以修改的大一些,越大延迟越久,修改后保存 4、…

C++笔记:类和对象

类和对象 认识类和对象 先来回忆一下C语言中的类型和变量,类型就像是定义了数据的规则,而变量则是根据这些规则来实际存储数据的容器。类是我们自己定义的一种数据类型,而对象则是这种数据类型的一个具体实例。类就可以理解为类型&#xff0c…

TypeScript之类

一、类的定义 二、对象的创建 class Person{id:number;name:string;age:number 18;constructor(id:number,name:string){this.id id;this.name name;}introduce():string{return hello,I am ${this.name},and I am ${this.age} years old.} }let person new Person(1,zhan…

保姆级教程 | Adobe Illustrator 中插入数学符号

背景 鉴于Adobe Illustrator作为比较专业的绘图/组图软件,我的论文数据作图都会选择先在origin中把原始数据绘制好,后都放入AI中细修。由于在作图过程中需要插入数学符号,但仿佛没有PowerPoint用起来那么熟悉,遂记录下。 步骤 …

Web APP设计:将多个相近的机器学习模型融合到一个Web APP中

将多个相近的机器学习模型融合到一个Web APP中 FUSE-ML是一个用于预测腰椎融合术后效果的APP,它可以做出三个不同的结论,分别评价术后的腰痛、腿痛和日常功能是否提高。 这估计是部署了三个机器学习模型在这个APP中,因为一个机器学习模型仅…

xxl-job的使用!!!

采用Spring Task可以解决定时任务问题,那么为什么还要使用分布式呢??? 原因:要将应用部署到多态服务器(防止某一台服务器宕机),并且在同一时刻只有一台服务器工作,这就需…

【牛客SQL快速入门】SQL基础(三)

一、条件函数 IF 条件函数 IF函数是最常用到的条件函数,写法为 if(xn,a,b),xn代表判断条件,如果xn时,那么结果返回a,否则返回b。 -- 把非北京大学的用户统一归为其他大学 Select device_id,if(university ‘北京大…

STM32H7的8个串口fifo收发(兼容232和485)

STM32H7的8个串口fifo收发(兼容232和485) 串口硬件串口时序串口高级特性同步和异步的区别单工、半双工、全双工的区别 STM32H78个串口fifo驱动定义数据结构uart_fifo.huart驱动包括中断配置等 应用示例RS485深入理解 仅供学习。 USART 的全称是 Universa…

【云计算】云数据中心网络(四):IPv6 网关

云数据中心网络(四):IPv6 网关 1.什么是 IPv6 网关2.IPv6 网关设计思路3.IPv6 网关的主要应用场景3.1 IPv6 私网通信3.2 IPv6 互联网通信3.3 IPv6 互联网通信(仅主动访问) 1.什么是 IPv6 网关 2017 年,中国…

如何学习VBA_3.2.20:DTP与Datepicker实现日期的输入

我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的劳动效率,而且可以提高数据处理的准确度。我推出的VBA系列教程共九套和一部VBA汉英手册,现在已经全部完成,希望大家利用、学习。 如果…

316_C++_xml文件解析成map,可以放到QT表格上, 且 xml、xlsx文件可以互相解析

xml文件例如&#xff1a; <?xml version"1.0" encoding"UTF-8" standalone"yes"?> <TrTable> <tr id"0" label"TR_PB_CH" text"CH%2"/> <tr id"4" label"TR_PB_CHN"…

空间滤波器和频率域滤波器的对应

说实话&#xff0c;4.7.4的前面的图4.37我没看懂在说什么&#xff0c;但是例4.15这个我倒是看明白了。中心思想是:本来空间滤波器计算的时候需要不停地滑动模版的&#xff0c;这里把滑动用x的值代替了,但是现在不搞滑动了&#xff0c;利用傅里叶变换和卷积公式&#xff0c;只要…

软考 - 系统架构设计师 - 嵌入式真题

问题 1&#xff1a; &#xff08;1&#xff09;.HTML 静态化&#xff1a;可以实现对系统经常访问的页面进行静态化以提高系统访问的效率&#xff0c;但系统页面通常需要数据库中的用户信息和用户选择来动态显示&#xff0c;因此不适合采用。 HTML 静态化&#xff1a; 将动态生成…

二.吊打面试官系列-数据库优化-Explain索引分析

1.如何定位慢SQL 我们知道数据库瓶颈80%都在查询上&#xff0c;数据库优化有一个比较重要的环节就是定位系统中的慢SQL&#xff0c;那么我们如何快速定位到哪些查询语句比较耗时呢&#xff1f;Mysql有自己的慢SQL定位功能 MySQL的慢查询日志&#xff0c;用来记录在MySQL中响应…

项目5-博客系统3+接口完

1.实现显示用户信息 ⽬前⻚⾯的⽤⼾信息部分是写死的. 形如 我们期望这个信息可以随着用户登陆而发生改变. • 如果当前⻚⾯是博客列表⻚, 则显⽰当前登陆⽤⼾的信息. • 如果当前⻚⾯是博客详情⻚, 则显⽰该博客的作者⽤⼾信息. 注意: 当前我们只是实现了显⽰⽤⼾名, 没有…

工厂设备数据采集

在信息化浪潮席卷全球的时代背景下&#xff0c;工厂设备数据采集成为推动企业数字化转型和智能化升级的关键环节。HiWoo Box网关以其卓越的性能和便捷的操作&#xff0c;为工厂设备数据采集提供了强有力的支持。本文将深入探讨工厂设备数据采集的概念&#xff0c;阐述如何利用H…

企业用户管理passwd/sudo工作原理/chage/用户组/切换用户及提权管理/chown知识详谈-6000字

passwd 用户自己给自己设置密码&#xff1a;直接passwd root用户给普通用户设置密码&#xff1a;passwd用户名 stdin 从标准输入获取信息 批量创建用户&#xff1a; bash脚本&#xff1a; for n in {01…10} do useradd wulin$n done n先取01然后循环&#xff0c;再取再执行…

掌握App用户注册情况,Xinstall来帮忙

在移动互联网时代&#xff0c;App已经成为企业与用户之间的重要桥梁。然而&#xff0c;对于许多App开发者来说&#xff0c;如何精准地获取和分析用户注册数据&#xff0c;一直是一个令人头疼的问题。幸运的是&#xff0c;有了Xinstall这样的一站式App全渠道统计服务商&#xff…

java八股文知识点讲解(个人认为讲的比较好的)

1、解决哈希冲突——链地址法&#xff1a;【第7章查找】19哈希表的查找_链地址法解决哈希冲突_哔哩哔哩_bilibili 2、解决哈希冲突——开放地址法 &#xff1a; 【第7章查找】18哈希表的查找_开放定址法解决哈希冲突_哔哩哔哩_bilibili 3、小根堆大根堆的创建&#xff1a;选择…

NL2SQL进阶系列(5):论文解读业界前沿方案(DIN-SQL、C3-SQL、DAIL-SQL、SQL-PaLM)、新一代数据集BIRD-SQL解读

NL2SQL进阶系列(5)&#xff1a;论文解读业界前沿方案&#xff08;DIN-SQL、C3-SQL、DAIL-SQL&#xff09;、新一代数据集BIRD-SQL解读 NL2SQL基础系列(1)&#xff1a;业界顶尖排行榜、权威测评数据集及LLM大模型&#xff08;Spider vs BIRD&#xff09;全面对比优劣分析[Text2…