?? 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 + -