赞
踩
问题一:
建立模型:线性规划模型
符号 | 含义 |
a | 写出甲类作业的数量 |
b | 写出乙类作业的数量 |
z | 目标值 |
约束条件:
1. 2a+b<10
2. a+b<8
3 .b<7
目标函数(max):z=4a+3b
1.函数介绍:
需要调用linprog函数(如用optimproblem函数要求matlab版本在2017及以上),格式如下:
[x,fval]=linprog(f,a,b,aeq,beq,lb,up,options)
1.x为取得最值时自变量x的取值
2.fval为取得最值时最值的值; f为目标函数,本题中为:z=4a+3b,表示为[4,3](线代知识)
3.a,b为不等约束,其中a为不等约束左边系数,b为不等约束右边系数
4.aeq,beq为等式约束,aeq为等式左边系数,beq为等式右边系数
5.lb,up分别为自变量自身取值范围。本题中a,b取值范围均为[0,+∞]
6.options为使用的方法种类,一般不做更改
7.注意,linprog函数默认求目标函数最小值,所以如果要求最大值需要使目标函数系数乘以-1
8.linprog函数不等约束方程里默认为Ax<b的形式,如果你得出Bx>C的约束方程,需要乘以-1变成(-B)x<-C的形式
调用解题函数代码:
- [x,fval]=linprog([-4,-3],[2,1;1,1;0,1],[10;8;7],[0,0;0,0;0,0],[0;0;0],[0,0],[inf,inf]);
- fval=-fval
输出结果:
- Optimal solution found.
- x =
-
- 2.0000
- 6.0000
- fval =
-
- 26
代码解释:
1、matlab中linprog函数默认求解目标函数最小值,而题目中为了求解最大值,所以把目标函数系数[4,3]改为[-4,-3],再由fval=-fval求出最大值。
2、由于本题没有等式约束,自变量的取值范围也没有额外要求,所以aeq,beq部分为零矩阵,lb也为零矩阵,ub为无限大。(matlab中inf为+∞),所以上述主要代码也可以缩减为:
[x,fval]=linprog([-4,-3],[2,1;1,1;0,1],[10;8;7])
问题二
建立模型:整数规划模型
符号和建模就不细说了,下面直接分析求解:
分析:由题目可以确定,目标函数是游泳成绩之和,最优解是其最小值。约束条件是每人只能选取一种游泳方式、每种游泳方式只能一人使用。因此自变量可以设成某个人用某种游泳方式(1~20),例如甲的四种游泳方式对应编号1-4,乙的编号对应5-8…自变量的取值为0、1,表示参加与否。
代码如下(matlab):
- clc;
- clear;
- c = [66.8 75.6 87 58.6 ...
- 57.2 66 66.4 53 ...
- 78 67.8 84.6 59.4 ...
- 70 74.2 69.6 57.2 ...
- 67.4 71 83.8 62.4];
- A = zeros(5,20);
- for i = 1:4
- A(1,i)=1;A(2,i+4)=1;A(3,i+8)=1;A(4,i+12)=1;A(5,i+16)=1;
- end
- b = [1,1,1,1,1]';
- Aeq = zeros(4,20);
- for i = 0:4;
- Aeq(1,1+4*i)=1;Aeq(2,2+4*i)=1;Aeq(3,3+4*i)=1;Aeq(4,4+4*i)=1;
- end
- beq = [1,1,1,1];
- lb = zeros(1,20);
- ub = ones(1,20);
- intcon = [1:20];
- [x,fval]=intlinprog(c,intcon,A,b,Aeq,beq,lb,ub)
结果:
蝶泳 | 仰泳 | 蛙泳 | 自由泳 |
乙 | 丙 | 丁 | 甲 |
问题三
建立模型:灰色预测模型
直接分析问题求解了,论文不能像这样写。
代码实现(matlab):
- %GM(1,N)
- clc;
- clear;
- x0 = [4383 7625 10500 11316 17818
- 83 131 180 195 306
- 146 212 233 259 404]; % 录入数据
- [m,n] = size(x0);
- x1_d = cumsum(x0,2); %累加序列
- x11 = x1_d(1,:);
- z11=0.5*(x11(1:end-1)+x11(2:end));%紧邻均值生成
- b = [-z11' x1_d(2,2:end)' x1_d(3,2:end)'];
- y = x0(1,2:end)';
- u = b\y %参数矩阵
- %%引入条件
- x20 = [x0(2,:),400];
- x30 = [x0(3,:),500];
- x21 = cumsum(x20);x31 = cumsum(x30);
- for k = 0:length(x21)-1
- x1(k+1) = (x0(1,1)-u(2)/u(1)*x21(k+1)-u(3)/u(1)*x31(k+1)).*exp(-u(1)*k)+u(2)/u(1)*x21(k+1)+u(3)/u(1)*x31(k+1);
- end
- x10hat = [x1(1),diff(x1)]; %进行差分运算
- epsilon = x0(1,:) - x10hat(1:end-1); %计算残差
- delta = abs(epsilon./x0(1,:)); %计算相对误差
- xhat = x10hat(end) % 预测最终值
(注:以上仅为解析,并不是评分标准)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。