clear all; % 清除工作区的所有变量
close all; % 关闭所有图形窗口
syms x1 x2; % 定义符号变量 x1 和 x2
% 定义目标函数 f
f = 0.5*(x1^2 + 2*x1*x2 + 3*x2^2) - 4*x1 - 6*x2;
% 求海赛矩阵 H
% hessian 函数用于求多元函数的海赛矩阵,这里是对目标函数 f 关于 x1 和 x2 求海赛矩阵
H = hessian(f, [x1, x2]);
% 求一次项系数向量
% diff 函数用于求函数的导数,simplify 函数用于化简表达式
df_dx1 = simplify(diff(f, x1));
df_dx2 = simplify(diff(f, x2));
fvec = [df_dx1; df_dx2];
% 将一次项系数转换为矩阵形式
% subs 函数用于将符号变量替换为具体的值,这里将 x1 和 x2 都替换为 0,然后转换为双精度数值
fvec_matrix = [double(subs(df_dx1, [x1, x2], [0, 0])); double(subs(df_dx2, [x1, x2], [0, 0]))];
% 定义约束条件矩阵 A 和右端向量 b
A = [1 0; 0 1; -1 -1]; % 约束条件矩阵,这里表示三个线性约束条件的系数
b = [1; 1; -1]; % 约束条件右端向量
% 使用 quadprog 函数求解二次规划问题
% double(H) 是目标函数的二次项系数矩阵,-fvec_matrix 是目标函数的一次项系数向量,
% A 和 b 是约束条件,求解得到最优解 x 和最优值 fval
[x,fval] = quadprog(double(H), -fvec_matrix, A, b);
disp('最优解 x:');
disp(x); % 显示最优解
disp('最优值 fval:');
disp(fval); % 显示最优目标函数值
Matlab二次规划示例
最新推荐文章于 2024-09-11 07:46:28 发布