📄 youhua.m
字号:
%优化问题
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1.线性规划
% 条件:
% min -5x1 - 4x2 - 6x3
% sub.to
% x1 - x2 + x3 <= 20
% 3x1 + 2x2 + 4x3 <= 42
% 3x1 + 2x2 <= 30
% 0 <= x1, 0 <= x2, 0 <= x3
f = [-5; -4; -6];
A = [1 -1 1; 3 2 4; 3 2 0];
b = [20; 42; 30];
lb = zeros(3,1);
[x,fval] = linprog(f, A, b, [], [], lb, [])
%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2.有约束的一元函数的最小值
% 条件:
% f(x) = ( x^3 + cosx + xlogx ) / e^x
% x在(0,1)
fun = inline( '( x^3 + cos(x) + x*log(x) ) / exp(x)' );
[x,fval] = fminbnd( fun, 0, 1)
%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3.无约束多元函数最小值
% y = 2x1^3 + 4x1x2^3 - 10x1x2 + x2^2
fun = inline( ' 2*x(1)^3 + 4*x(1)*x(2)^3 - 10*x(1)*x(2) + x(2)^2 ', 'x' );
[x,fval] = fminsearch(fun,[0,0])
% 当函数阶数大于2时,使用fminu比fmins更有效,但当所选函数高度不连续时,使用fmins效果较好。
% f(x) = e^x1 ( 4x1^2 + 4x1x2 + 2x2^2 + 2x2 + 1 )
fun = inline( 'exp(x(1)) * ( 4*x(1)^2 + 4*x(1)*x(2) + 2*x(2)^2 + 2*x(2) + 1 )' , 'x' );
x0 = [-1,1];
options = [];
[x,options] = fminsearch( fun, x0, options )
%%%%%%%%%%%%%%%%%%%%%%%%%%%% 4.有约束多元函数最小值
% 求下列问题在(0,1)处的最优解
% min x(1)^2 + x(2)^2 - x(1)*x(2) - 2*x(1) - 5x(2)
% sub.to -(x(1) - 1)^2 + x(2) >= 0
% 2*x(1) - 3*x(2) + 6 >= 0
%function [c, ceq] = mycon(x)
%c = ( x(1) -1 )^2 - x(2) ;
%ceq = [ ];
% f = ' x(1)^2 + x(2)^2 - x(1)*x(2) - 2*x(1) - 5*x(2) ';
% x0 = [0, 1];
% A = [-2, 3];
% b = 6;
% Aeq = [ ];
% beq = [ ];
% lb = [ ];
% ub = [ ];
% [x, fval] = fmincon( f, x0, A, b, Aeq, beq, lb, ub, @mycon );
%%%%%%%%%%%%%%%%%%%%%%%%%%% 5.二次规划问题
% min f(x) = 1/2*x(1)^2 + x(2)^2 - x(1)*x(2) - 2*x(1) - 6*x(2)
% sub.to x(1) + x(2) <= 2
% -x(1) + 2*x(2) <= 2
% 2*x(1) + x(2) <= 3
% 0 <= x(1) , 0 <= x(2)
% 先化 f(x) = 1/2*x'*H*x + f'*x
H = [1 -1; -1 2];
f = [-2; -6];
A = [1 1; -1 2; 2 1];
b = [2; 2; 3];
lb = zeros(2,1);
[x, fval] = quadprog(H, f, A, b, [], [], lb)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -