matlab解决线性规划问题 matlab线性规划问题代码

   2023-02-09 学习力0
核心提示:求解线性规划问题:化为标准形式:输入:输出:如果有非线性函数,如何做呢?例如: 每一个xi 变成了两个量 u, v 所以我们需要2n长度的向量来表示新的自变量x*,前n项为u,后n项为v; 如题: 代码为:c = 1:4;c = [c,c]';Aeq = [1 -1 -1 1;1 -1 1 -3;1 -1 -

求解线性规划问题:

matlab解决线性规划问题

化为标准形式:

matlab解决线性规划问题

matlab解决线性规划问题

输入:

matlab解决线性规划问题

输出:

matlab解决线性规划问题

如果有非线性函数,如何做呢?

例如:

matlab解决线性规划问题

matlab解决线性规划问题

 每一个xi 变成了两个量 u, v 所以我们需要2n长度的向量来表示新的自变量x*,前n项为u,后n项为v;

matlab解决线性规划问题

 如题:

matlab解决线性规划问题

 代码为:

c = 1:4;
c = [c,c]';
Aeq = [1 -1 -1 1;1 -1 1 -3;1 -1 -2 3];
beq = [0 1 -1/2]';
aeq = [Aeq,-Aeq];
[x,fval,exitflag] = linprog(c,[],[],aeq,beq,zeros(8,1))
x = x(1:4)-x(5:8)

输出为:

matlab解决线性规划问题

实际问题:

matlab解决线性规划问题

 

指派问题:

  matlab解决线性规划问题

matlab解决线性规划问题

      matlab解决线性规划问题

matlab解决线性规划问题

更复杂的问题:用✔️标记未选中的0的行,然后对该0所在列选中的0行标记✔️, 然后对该行其他0所在列标记✔️,然后对✔️标记的行重复之前操作,直到✔️号标记的补行和✔️号标记的列覆盖所有的0元素为止。未覆盖的元素最小值m,对应标记行减去m,对应标记列加上m可以得到新的等价变换矩阵,得到最优指派问题的解。

 matlab解决线性规划问题

matlab解决线性规划问题

matlab解决线性规划问题

 多目标规划模型:

matlab解决线性规划问题

matlab解决线性规划问题

       matlab解决线性规划问题

matlab解决线性规划问题

模型一:固定风险上限,最大化收益;

matlab解决线性规划问题

matlab解决线性规划问题

x0表示存银行,但收益率很低只有5%,

因为不同人可接受的风险度的上限不同,所以对a从0到0.05进行遍历,步长为0.001。 对于每一个a,得到当前a情况下最优的收益Q,做出Q-a图像。

代码如下:

clc,clear

a=0;

hold on

while a<0.05

c=[-0.05,-0.27,-0.19,-0.185,-0.185];

A=[zeros(4,1),diag([0.025,0.015,0.055,0.026])]; 

b=a*ones(4,1);

Aeq=[1,1.01,1.02,1.045,1.065];

beq=1;

lb=zeros(5,1); 

[x,Q]=linprog(c,A,b,Aeq,beq,lb);

D = std(x);

Q=-Q;

plot(a,Q,'*b');

plot(a,D,'^r');

a=a+0.001;

end

xlabel('a'),ylabel('Q')

matlab解决线性规划问题

由图像可以看出当a取0.025附近时候,最优Q已经达到了最大值,之后不再改变,a只会影响Q的下限,而不会影响Q的上限。

红色点表示解的方差值,可见投资较为分散时,投资者承担的风险越小,与题意一致(a<0.5%时)。

matlab解决线性规划问题

可见在0.006处左边Q增长很快,右边增长很慢,所以a = 0.006时候的Q值为相对最优解,

matlab解决线性规划问题

模型二:

 matlab解决线性规划问题

代码如下:

clc,clear
k=0;
hold on
while k<0.25
c=[zeros(1,5),1]';
a1=[-0.05,-0.27,-0.19,-0.185,-0.185,0];
a2=[diag([0,0.025,0.015,0.055,0.026]),-1*ones(5,1)];
A=[a1;a2];
b=[-k,zeros(1,5)]';
Aeq=[1,1.01,1.02,1.045,1.065,0];
beq=1;
lb=zeros(6,1); 
[x,minrisk]=linprog(c,A,b,Aeq,beq,lb);
Q = -a1*x;
plot(k,minrisk*10,'*b'); 
plot(k,Q,'^r');
k=k+0.005;
end
xlabel('k'),ylabel('Q & 10*minrisk')

输出:

matlab解决线性规划问题

可见随着自己设置的最低收益率k的增加,Q值先不变(保持0.005,为全储存银行所得收益率),然后增加;

minrisk最小风险也随着k增加而增加,在k小于0.2时候,风险增加缓慢,大于0.2时候,风险增加速度突然加快,所以

k = 0.20时候的Q值为最优解,保证了风险较小并且收益率较大。

此时Q = 20% ,解同模型一;

模型三:

clc,clear
s=0;
hold on
while s<1
c=(1-s)*[-0.05,-0.27,-0.19,-0.185,-0.185,0]'+s*[zeros(1,5),1]';
a1=[-0.05,-0.27,-0.19,-0.185,-0.185,0];
A=[diag([0,0.025,0.015,0.055,0.026]),-1*ones(5,1)];
b=zeros(5,1);
Aeq=[1,1.01,1.02,1.045,1.065,0];
beq=1;
lb=zeros(6,1); 
[x,fval]=linprog(c,A,b,Aeq,beq,lb);
Q = -a1*x;
plot(s,fval,'*b'); 
plot(s, Q,'^r');
s=s+0.02;
end
xlabel('s'),ylabel('Q & fval')

输出:

matlab解决线性规划问题

 

可见随着风险的加权系数越来越高,使得最大收益率呈梯度下降,当s = 0.764时候Q开始呈断崖式下降,之后收益率一直比较小,

该点s = 0.764, 可见我们此刻更看重的是风险,但同时也侧重收益率,所以此时的Q最优。

Q 接近20%,与上面的模型所得结论基本一致。

 

 
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • 如何在Abaqus的python中调用Matlab程序
    目录1. 确定版本信息2. 备份python3. 设置环境变量4. 安装程序5. 调试运行参考资料Abaqus2018操作系统Win10 64位Python版本2.7(路径C:\SIMULIA\CAE\2018\win_b64\tools\SMApy\python2.7)2. 备份python将上述的“python2.7”文件夹复制出来,避免因操作错误
    03-16
  • 如何将极坐标数据转换为笛卡尔坐标系并绘制[MATLAB]
    如何将极坐标数据转换为笛卡尔坐标系并绘制[MAT
    你想做的事考虑根据与原点的距离 $r$ 和 $xy$ 平面上的角度 $heta$ 绘制数据 $P(r, heta)$。例如,雷达获取的信号包含有关目标范围 $r$ 和方位角 $heta$ 的信息。就是下图。在本文中,$heta$ 是从 $x$ 轴测量的角度。显示示例考虑创建依赖于 $r, heta$ 的虚拟
    03-16
  • 【MATLAB与机械设计】一维优化进退法确定初始区间
    【MATLAB与机械设计】一维优化进退法确定初始区
    在讨论一维搜索时,首先保证搜索区间函数具有单峰性,也就是在区间[a,b]中函数是凸函数,对于求极小值问题,函数值具有高—低—高的特性,在区间[a,b]上有唯一的最小值。1,方法的建立2.进退法确定搜索区间的程序框图3,根据上述的程序框图,编写的MATLAB程序
    03-08
  • 用于微型四轮驱动的 6T 小齿轮原型和使用 MATLAB 的 FEM 结构分析
    用于微型四轮驱动的 6T 小齿轮原型和使用 MATLA
    介绍我使用迷你 4WD 套件使用 Raspberry Pi 制作机器人汽车。定制零件丰富且方便,因为它们在附近的商店很容易买到。但是,由于Mini 4WD的速度非常快,因此在低速时很难控制速度。因此,我使用 3D 打印机制作了自己的 6T 小齿轮,并尝试改变齿轮比。 成型小齿
    03-08
  • ROS与Matlab系列:一个简单的运动控制 基于matl
    转自:http://blog.exbot.net/archives/2594Matlab拥有强大的数据处理、可视化绘图能力以及众多成熟的算法函数,非常适合算法开发;在控制系统设计中,Simulink也是普遍使用的设计和仿真工具。而ROS系统,则是一种新的标准化机器人系统软件框架。通过ROS,你
    02-10
  • matlab 遍历结构体struc的成员
    MATLAB中专门用于对结构数组的操作的函数并不多,通过 help datatypes获取数据类型列表,可以看到其中的结构数据类型的有关的函数,主要如表4.3.1所示。表4.3.1 结构数组的操作函数函数名             功能描述 deal                 把输入处
    02-09
  • 02-09
  • schroeder reverb matlab实现
    schroeder reverb matlab实现
    原理参考:Natural sounding artificial reverberation combFilter.m:function output = combFilter(delay, gain, input)fs = 48000;delaySample = int32(delayTime * fs / 1000);B = [1 zeros(1, delaySample - 1)];A=[1 zeros(1, delaySample - 2) -gain];
    02-09
  • C/C++中调用matlab引擎计算 matlab转c
    原帖地址:http://blog.sina.com.cn/s/blog_6adcb3530101cvot.html一,在linux环境使用matlab引擎必须先进行一些必要的配置1,matlab引擎依赖/bin/csh启动,所以不管你使用何种shell,都必须安装csh。**2,matlab引擎依赖的动态库文件目录必须在系统当前的
    02-09
  • MATLAB 图像放大/缩小,双线性插值
    MATLAB 图像放大/缩小,双线性插值
    半年前写过matlab最邻近插值的图像缩放,没怎么考虑边界问题。更早之前用Opencv写过双线性插值图像放大,不过写的比较混乱。所以这里用matlab重新再清楚的写一遍。 1 close all; 2 clear all; 3 clc; 45 m=1.8;%放大或缩小的高度 6 n=2.3;%放大或缩小的宽度 7
    02-09
点击排行