6.15打卡

工程数学实验5
• 所花时间:5
• 代码行数:174
• 博客容量:1
• 代码如下:

实验五:MATLAB最优化工具箱的使用
一、实验目的
通过一个农业生产计划优化安排的实例求解,培养学生解决实际线性规划问题的初步能力;熟悉线性规划的建模过程;掌握Matlab优化工具箱中线性规划函数的调用。

二、实验内容
某村计划在100公顷的土地上种植a、b、c三种农作物。可以提供的劳力、粪肥和化肥等资源的数量,种植每公顷农作物所需这三种资源的数量,以及能够获得的利润如表所示。
种植投入产出表
	用  工	粪肥(吨)	化肥(千克)	利润(元)
a	450	35	350	1500
b	600	25	400	1200
c	900	30	300	1800
可提供资源	63000	3300	33000	
其中一个劳动力干一天为1个工。现在要求为该村制定一个农作物的种植计划,确定每种农作物的种植面积,使得总利润最大。

第二题
求解从一点(0,0,0)到超平面 的最短距离,
其中, , 。
通过建模构造二次规划问题,求解以上问题的最优解和最优值。


三、算法步骤、代码、及结果
1. 算法步骤
目标函数maxZ=1500x1+1200x2+1800x3
约束条件:
		450x1+600x2+900x3≤63000
			35x1+25x2+30x3≤3300
		350x1+400x2+300x3≤33000
		x1+x2+x3≤100
		x1≥0,x2≥0,x3≥0 

第二题
决策变量 x1 x2 x3
目标函数:minf(x)=x1^2+x2^2+x3^2
约束条件:x1+2x2+x3=4
−x1+x2−x3=2

2. 代码

第一题
% 定义线性规划问题的参数
f = [-1500, -1200, -1800]; % 目标函数系数 (求最大化,转换为最小化)

A = [450, 600, 900;
     35, 25, 30;
     350, 400, 300;
     1, 1, 1]; % 不等式约束系数矩阵

b = [63000; 3300; 33000; 100]; % 不等式约束的右侧向量

% 下界
lb = [0, 0, 0];

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

% 输出最优解和最优值
fprintf('最优解:\n');
fprintf('种植面积a: %.2f 公顷\n', x(1));
fprintf('种植面积b: %.2f 公顷\n', x(2));
fprintf('种植面积c: %.2f 公顷\n', x(3));

fprintf('\n对应的最优值(总利润): %.2f 元\n', -fval);


第二题代码

% 定义目标函数的系数矩阵 (二次项系数矩阵) 和线性项系数向量
H = 2 * eye(3); % 由于目标函数为 x1^2 + x2^2 + x3^2, 故H为单位矩阵乘2
f = zeros(3, 1); % 目标函数中线性项系数向量为0

% 定义等式约束
Aeq = [1 2 1; -1 1 -1]; % 系数矩阵
beq = [4; 2]; % 右侧常数向量

% 求解二次规划问题
options = optimoptions('quadprog', 'Display', 'off');
[x, fval] = quadprog(H, f, [], [], Aeq, beq, [], [], [], options);

% 输出最优解和最优值
fprintf('最优解:\n');
fprintf('x1: %.4f\n', x(1));
fprintf('x2: %.4f\n', x(2));
fprintf('x3: %.4f\n', x(3));

fprintf('\n对应的最优值(最短距离的平方): %.4f\n', fval);




3. 结果
 


 

四、心得体会

通过这次实验,我学习并掌握了MATLAB优化工具箱中二次规划函数的调用方法,并通过一个实际的投资组合优化问题的实例,培养了解决实际线性规划问题的初步能力。二次规划在目标函数中包含二次项,可以更准确地描述某些实际问题的优化需求。
 

posted @ 2024-06-15 17:38  aallofitisst  阅读(20)  评论(0)    收藏  举报