目录
实验报告

Matlab
function untitled()
% 定义目标函数
function f = fun(x)
f = -2 * x(1) - x(2);
end
function [g, ceq] = mycon2(x)
g = [x(1)^2 + x(2)^2 - 25; x(1)^2 - x(2)^2 - 7];
ceq = [];
end
x0 = [3; 3];
VLB = [0; 0];
VUB = [5; 10];
[x, fval, ~, ~] = fmincon(@fun, x0, [], [], [], [], VLB, VUB, @mycon2);
disp('最优解为:');
disp(x);
disp('最优目标函数值为:');
disp(fval);
end


Matlab
fun = @(x) x(1)^2 + x(2)^2;
x0 = [1, 1];
Aeq = [1, 1];
beq = 2;
options = optimoptions('fmincon', 'Display', 'iter');
[x, fval] = fmincon(fun, x0, [], [], Aeq, beq, [], [], [], options);
disp(['最小值为:', num2str(fval)]);
disp(['最优解为:', num2str(x)]);


Matlab
fun = @(x) 0.5 * x(1)^2 + x(2)^2 - x(1) * x(2) - 2 * x(1) - 6 * x(2);
x0 = [0, 0];
Aeq = [1, 1];
beq = 0;
options = optimoptions('fmincon', 'Display', 'iter');
[x, fval] = fmincon(fun, x0, [], [], Aeq, beq, [], [], [], options);
disp(['最小值为:', num2str(fval)]);
disp(['最优解为:', num2str(x)]);


Matlab
fun = @(x) max([2*x(1)^2+x(2)^2-48*x(1)-40*x(2)+304, -x(1)^2-3*x(2)^2, x(1)+3*x(2)-18, -x(1)-x(2), x(1)+x(2)-8]);
x0 = [0, 0];
[x, fval, exitflag, output] = fminimax(@(x) -fun(x), x0);
disp('最优解:');
disp(x);
disp('最优值:');
disp(-fval);


Matlab
f = [-21; -11; -1; -31; -21; -11; -41; -31; -21];
A = [1 1 1 1 1 1 1 1 1
1 1 1 0 0 0 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 0 0 0 1 1 1
-2 0 0 4 0 0 2 0 0
0 -4 0 0 2 0 0 0 0
0 0 -6 0 0 0 0 0 -2
-0.5 0 0 1 0 0 2 0 0
0 -1.5 0 0 0 0 0 1 0
0 0 -0.5 0 0 1 0 0 2];
b = [14000; 5000; 5000; 5000; 0; 0; 0; 0; 0; 0];
Aeq = [1 0 0 1 0 0 1 0 0
0 1 0 0 1 0 0 1 0
0 0 1 0 0 1 0 0 1];
beq = [3000; 2000; 1000];
vlb = zeros(9, 1);
vub = [];
[x, fval, exitflag, output] = linprog(f, A, b, Aeq, beq, vlb, vub);
disp('Optimal Solution:');
disp(['x1 = ', num2str(x(1))]);
disp(['x2 = ', num2str(x(2))]);
disp(['x3 = ', num2str(x(3))]);
disp(['x4 = ', num2str(x(4))]);
disp(['x5 = ', num2str(x(5))]);
disp(['x6 = ', num2str(x(6))]);
disp(['x7 = ', num2str(x(7))]);
disp(['x8 = ', num2str(x(8))]);
disp(['x9 = ', num2str(x(9))]);
disp(['Optimal Objective Value: ', num2str(-fval)]);

实验心得
本次通过 MATLAB 完成非线性规划与线性规划相关实验,系统练习了目标函数构建、约束条件设置、优化函数调用与结果分析等完整流程,不仅加深了对数学规划理论知识的理解,也提升了运用计算机工具解决实际优化问题的能力,收获颇丰。
实验涵盖了典型非线性规划、等式约束优化、极小极大问题以及大规模线性规划问题,让我直观认识到不同优化模型的特点与适用场景。在使用fmincon函数时,我深刻体会到初始点、变量上下界、约束条件写法对求解结果的重要影响。非线性规划问题不保证全局最优,合理的初始值能够显著提升求解效率与结果可靠性,而约束条件的准确表达则直接决定解的可行性。实验中对目标函数取负实现最大化问题、区分不等式约束与等式约束等操作,让我进一步理清了优化算法的基本逻辑,也更加重视模型建立的严谨性。
在处理多约束、多变量的优化问题时,我认识到 MATLAB 优化工具箱的强大之处。它将复杂的迭代算法封装为简洁易用的函数,使用者只需聚焦问题建模,无需重复实现算法细节。同时,通过观察迭代过程输出信息,我能够理解算法的收敛过程,判断优化是否稳定、是否陷入局部最优,这对后续分析与调整模型具有重要意义。极小极大问题的求解让我接触到更贴近实际决策的优化形式,这类问题追求最坏情况下的最优,在资源分配、风险控制等场景中具有很高的应用价值,也让我意识到优化问题并非单一目标,而是需要根据实际需求灵活选择模型。
最后的线性规划实验虽然变量较多、约束复杂,但通过矩阵化建模与linprog函数求解,依然能够高效得到最优解。这让我明白,实际工程与管理问题往往具有高维度、多约束的特点,规范化建模与标准化工具结合是解决问题的关键。同时也提醒我,在建立模型时要合理整理约束关系,避免矩阵输入错误导致求解失败,培养了细致严谨的实验习惯。
通过本次实验,我不仅巩固了非线性规划、线性规划的理论知识,掌握了 MATLAB 优化工具箱的核心用法,更提升了数学建模与问题抽象能力。优化问题的核心在于合理抽象目标、准确刻画约束,而工具则是实现求解的手段。未来面对更复杂的实际优化问题时,我能够更加从容地选择合适的优化模型,规范编写程序,分析求解结果并给出合理决策。
本次实验也让我认识到理论与实践结合的重要性。课堂上的算法原理较为抽象,而通过编程实现与案例求解,知识变得更加具体可感。同时,优化问题的求解并非一蹴而就,需要不断调试参数、检查模型、分析结果,这一过程锻炼了耐心与逻辑思维能力。整体而言,本次实验为后续更深入的学习与实际应用奠定了坚实基础,也让我对优化方法在科学计算、工程设计、管理决策等领域的应用有了更清晰的认识。