数学建模之线性规划学习笔记

前言

线性规划可能看起来很简单,但其中也不乏比较精妙的处理方法。上了数模选修课之后才知道自己原来对建模的理解太浅,只知道想一种方法算出一个结果,而没有仔细考虑结果的合理性与对结果的分析。接下来简单介绍一下线性规划,然后以投资问题做例子进行具体方法的说明。

线性规划简介

在这里插入图片描述

投资问题

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

附matlab源码(linprog)

%M1.m
clear;clc;
original_data=[2.3 0 0 0;
    9.6 42 2.1 181;
    18.5 54 3.2 407;
    49.4 60 60 428;
    23.9 42 1.5 549;
    8.1 1.2 7.6 270;
    14 39 3.4 397;
    40.7 68 5.6 178;
    31.2 33.4 3.1 220;
    33.6 53.3 2.7 475;
    36.8 40 2.9 248;
    11.8 31 5.1 195;
    9 5.5 5.7 320;
    35 46 2.7 267;
    9.4 5.3 4.5 328;
    15 23 7.6 131;];
r=original_data(:,1)/100;%ÀûÂÊ
q=original_data(:,2)/100;%·çÏÕÂÊ
p=original_data(:,3)/100;%·ÑÂÊ
u=original_data(:,4)/100;%ãÐÖµ
M=1e6;
range=0.01:0.01:1;
target=[];
for q_bar=range
    [x,fval]=linprog((p-r)',diag(q),q_bar*M*ones(1,length(r)),(1+p)',M,zeros(1,length(p)),[]);
    max_target=-fval;
    target(end+1)=max_target;
end
plot(range,target);
title('Model 1');
xlabel('q bar');
ylabel('max R');

%M2.m
clear;clc;
original_data=[2.3 0 0 0;
    9.6 42 2.1 181;
    18.5 54 3.2 407;
    49.4 60 60 428;
    23.9 42 1.5 549;
    8.1 1.2 7.6 270;
    14 39 3.4 397;
    40.7 68 5.6 178;
    31.2 33.4 3.1 220;
    33.6 53.3 2.7 475;
    36.8 40 2.9 248;
    11.8 31 5.1 195;
    9 5.5 5.7 320;
    35 46 2.7 267;
    9.4 5.3 4.5 328;
    15 23 7.6 131;];
r=original_data(:,1)/100;%ÀûÂÊ
q=original_data(:,2)/100;%·çÏÕÂÊ
p=original_data(:,3)/100;%·ÑÂÊ
u=original_data(:,4)/100;%ãÐÖµ
M=1e6;
range=0.01:0.01:0.33;
risk_rate=[];
R=[];
for r_bar=range
    f=zeros(1,length(p));
    f(end+1)=1;
    Aeq=[(1+p)',0];
    A_temp_1=[(p-r)',0];
    A_temp_2=diag(q);
    A=[A_temp_1;[A_temp_2,-1*ones(length(p),1)]];
    [x,fval]=linprog(f',A,[-r_bar*M;zeros(length(p),1)],Aeq,M,zeros(1,length(p)+1),[]);
    risk_rate(end+1)=fval/M;
    R(end+1)=sum((r-p).*x([1:end-1]));
end
subplot(1,2,1);
plot(range,risk_rate*100);
title('Model 2:risk rate--r bar');
xlabel('r bar');
ylabel('risk rate');
subplot(1,2,2);
plot(range,R);
title('Model 2:R--r bar');
xlabel('r bar');
ylabel('R');

%M3.m
clear;clc;
original_data=[2.3 0 0 0;
    9.6 42 2.1 181;
    18.5 54 3.2 407;
    49.4 60 60 428;
    23.9 42 1.5 549;
    8.1 1.2 7.6 270;
    14 39 3.4 397;
    40.7 68 5.6 178;
    31.2 33.4 3.1 220;
    33.6 53.3 2.7 475;
    36.8 40 2.9 248;
    11.8 31 5.1 195;
    9 5.5 5.7 320;
    35 46 2.7 267;
    9.4 5.3 4.5 328;
    15 23 7.6 131;];
r=original_data(:,1)/100;%ÀûÂÊ
q=original_data(:,2)/100;%·çÏÕÂÊ
p=original_data(:,3)/100;%·ÑÂÊ
u=original_data(:,4)/100;%ãÐÖµ
M=1e6;
R=[];
range=0:0.01:1;
for rho=range
    f=[(rho-1)*(r-p);rho];
    A=[diag(q),-1*ones(length(q),1)];
    b=zeros(length(q),1);
    Aeq=(1+p)';Aeq(end+1)=0;
    beq=M;
    [x,fval]=linprog(f,A,b,Aeq,beq,zeros(length(p)+1,1),[]);
    R(end+1)=sum((r-p).*x([1:end-1]));
end
plot(range,R);
title('Model 3');
xlabel('rho');
ylabel('R');

希望大家都能在数学建模中找到乐趣!!!而不是仅仅当作一个比赛来看待

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值