⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 5.txt

📁 这是一些关于学习matlab 的资料
💻 TXT
📖 第 1 页 / 共 3 页
字号:
>>f = [-2; -6];
>>A = [1 1; -1 2; 2 1];
>>b = [2; 2; 3];
>>lb = zeros(2,1);
>>[x,fval,exitflag,output,lambda] = quadprog(H,f,A,b,[ ],[ ],lb)
结果为:
x =     %最优解
    0.6667
    1.3333
fval =     %最优值
   -8.2222
exitflag =    %收敛
     1
output = 
       iterations: 3
        algorithm: 'medium-scale: active-set'
    firstorderopt: [ ]
     cgiterations: [ ]
lambda = 
      lower: [2x1 double]
      upper: [2x1 double]
      eqlin: [0x1 double]
    ineqlin: [3x1 double]
>> lambda.ineqlin
ans =
    3.1111
    0.4444
         0
>> lambda.lower
ans =
     0
     0
说明  第1、2个约束条件有效,其余无效。
例5-9  求二次规划的最优解
max   f (x1, x2)=x1x2+3
sub.to    x1+x2-2=0
解:化成标准形式: 
 
sub.to    x1+x2=2
在Matlab中实现如下:
>>H=[0,-1;-1,0];
>>f=[0;0];
>>Aeq=[1 1];
>>b=2;
>>[x,fval,exitflag,output,lambda] = quadprog(H,f,[ ],[ ],Aeq,b)
结果为:
x =
    1.0000
    1.0000
fval =
   -1.0000
exitflag =
     1
output = 
    firstorderopt: 0
       iterations: 1
     cgiterations: 1
        algorithm: [1x58 char]
lambda = 
      eqlin: 1.0000
    ineqlin: [ ]
      lower: [ ]
      upper: [ ]
5.4  “半无限”有约束的多元函数最优解
“半无限”有约束多元函数最优解问题的标准形式为
 
sub.to       
 
 
 
 
 
 
其中:x、b、beq、lb、ub都是向量;A、Aeq是矩阵;C(x)、Ceq(x)、 是返回向量的函数,f(x)为目标函数;f(x)、C(x)、Ceq(x)是非线性函数; 为半无限约束, 通常是长度为2的向量。
在MTALAB5.x中,使用函数seminf解决这类问题。
函数  fseminf
格式  x = fseminf(fun,x0,ntheta,seminfcon)
x = fseminf(fun,x0,ntheta,seminfcon,A,b)
x = fseminf(fun,x0,ntheta,seminfcon,A,b,Aeq,beq)
x = fseminf(fun,x0,ntheta,seminfcon,A,b,Aeq,beq,lb,ub)
x = fseminf(fun,x0,ntheta,seminfcon,A,b,Aeq,beq,lb,ub,options)
[x,fval] = fseminf(…)
[x,fval,exitflag] = fseminf(…)
[x,fval,exitflag,output] = fseminf(…)
[x,fval,exitflag,output,lambda] = fseminf(…)
参数说明:x0为初始估计值;
fun为目标函数,其定义方式与前面相同;
A、b由线性不等式约束 确定,没有,则A=[ ],b=[ ];
Aeq、beq由线性等式约束 确定,没有,则Aeq=[ ],beq=[ ];
Lb、ub由变量x的范围 确定;
options为优化参数;
ntheta为半无限约束的个数;
seminfcon用来确定非线性约束向量C和Ceq以及半无限约束的向量K1,K2,…,Kn,通过指定函数柄来使用,如:
x = fseminf(@myfun,x0,ntheta,@myinfcon)
先建立非线性约束和半无限约束函数文件,并保存为myinfcon.m:
function [C,Ceq,K1,K2,…,Kntheta,S] = myinfcon(x,S)
%S为向量w的采样值
% 初始化样本间距
if  isnan(S(1,1)),
S = …    % S 有ntheta行2列
end
w1 = …     %计算样本集
w2 = …     %计算样本集
wntheta = …   % 计算样本集
K1 = …     % 在x和w处的第1个半无限约束值
K2 = …     %在x和w处的第2个半无限约束值
Kntheta = …  %在x和w处的第ntheta个半无限约束值
C = …        % 在x处计算非线性不等式约束值
Ceq = …      % 在x处计算非线性等式约束值
如果没有约束,则相应的值取为“[ ]”,如Ceq=[]
fval为在x处的目标函数最小值;
exitflag为终止迭代的条件;
output为输出的优化信息;
lambda为解x的Lagrange乘子。
例5-10  求下面一维情形的最优化问题
 
sub.to 
 
 
 
 
解:将约束方程化为标准形式:
 
 
先建立非线性约束和半无限约束函数文件,并保存为mycon.m:
function [C,Ceq,K1,K2,S] = mycon(X,S)
% 初始化样本间距:
if  isnan(S(1,1)),
   S = [0.2  0; 0.2  0];
end
% 产生样本集:
w1 = 1:S(1,1):100;
w2 = 1:S(2,1):100;
% 计算半无限约束:
K1 = sin(w1*X(1)).*cos(w1*X(2)) - 1/1000*(w1-50).^2 -sin(w1*X(3))-X(3)-1;
K2 = sin(w2*X(2)).*cos(w2*X(1)) - 1/1000*(w2-50).^2 -sin(w2*X(3))-X(3)-1;
% 无非线性约束:
C = [ ]; Ceq=[ ];
% 绘制半无限约束图形
plot(w1,K1,'-',w2,K2,':'),title('Semi-infinite constraints')
然后在MATLAB命令窗口或编辑器中建立M文件:
fun = 'sum((x-0.5).^2)';
x0 = [0.5; 0.2; 0.3];      % Starting guess
[x,fval] = fseminf(fun,x0,2,@mycon)
结果为:
x =
    0.6673
    0.3013
    0.4023
fval =
    0.0770
>>[C,Ceq,K1,K2] = mycon (x,NaN);    % 利用初始样本间距
>>max(K1)
ans =
      -0.0017
>>max(K2)
ans =
      -0.0845
 
图5-1
例5-11  求下面二维情形的最优化问题
 
sub.to 
 
 
 
 
初始点为x0=[0.25, 0.25, 0.25]。
解:先建立非线性和半无限约束函数文件,并保存为mycon.m:
function [C,Ceq,K1,S] = mycon(X,S)
% 初始化样本间距:
if  isnan(s(1,1)),
   s = [2 2];
end
% 设置样本集
w1x = 1:s(1,1):100;
w1y = 1:s(1,2):100;
[wx, wy] = meshgrid(w1x,w1y);
% 计算半无限约束函数值 
K1 = sin(wx*X(1)).*cos(wx*X(2))-1/1000*(wx-50).^2 -sin(wx*X(3))-X(3)+…
sin(wy*X(2)).*cos(wx*X(1))-1/1000*(wy-50).^2-sin(wy*X(3))-X(3)-1.5;
% 无非线性约束
C = [ ]; Ceq=[ ];
%作约束曲面图形
m = surf(wx,wy,K1,'edgecolor','none','facecolor','interp');
camlight headlight
title('Semi-infinite constraint')
drawnow
然后在MATLAB命令窗口下键入命令:
>>fun = 'sum((x-0.2).^2)';
>>x0 = [0.25, 0.25, 0.25]; 
>>[x,fval] = fseminf(fun,x0,1,@mycon)
结果为(如图)
x =
    0.2926    0.1874    0.2202
fval =
    0.0091
>>[c,ceq,K1] = mycon(x,[0.5,0.5]);  % 样本间距为0.5
>>max(max(K1))
ans =
    -0.0027
5.5  极小化极大(Minmax)问题
极小化极大问题的标准形式为
 
sub.to     
 
 
 
 
其中:x、b、beq、lb、ub是向量,A、Aeq为矩阵,C(x)、Ceq(x)和F(x)是返回向量的函数,F(x)、C(x)、Ceq(x)可以是非线性函数。
在MATLAB5.x中,它的求解由函数minmax实现。
函数  fminimax
格式  x = fminimax(fun,x0)
x = fminimax(fun,x0,A,b)
x = fminimax(fun,x0,A,b,Aeq,beq)
x = fminimax(fun,x0,A,b,Aeq,beq,lb,ub)
x = fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
x = fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
[x,fval,maxfval] = fminimax(…)
[x,fval,maxfval,exitflag] = fminimax(…)
[x,fval,maxfval,exitflag,output] = fminimax(…)
[x,fval,maxfval,exitflag,output,lambda] = fminimax(…)
参数说明:fun为目标函数;
x0为初始值;
A、b满足线性不等约束 ,若没有不等约束,则取A=[ ],b=[ ];
Aeq、beq满足等式约束 ,若没有,则取Aeq=[ ],beq=[ ];
lb、ub满足 ,若没有界,可设lb=[ ],ub=[ ];
nonlcon的作用是通过接受的向量x来计算非线性不等约束 和等式约束 分别在x处的值C和Ceq,通过指定函数柄来使用,如:>>x = fminimax(@myfun,x0,A,b,Aeq,beq,lb,ub,@mycon),先建立非线性约束函数,并保存为mycon.m:function [C,Ceq] = mycon(x)
C = …    % 计算x处的非线性不等约束 的函数值。
Ceq = …   % 计算x处的非线性等式约束 的函数值。
options为指定的优化参数;
fval为最优点处的目标函数值;
maxfval为目标函数在x处的最大值;
exitflag为终止迭代的条件;
lambda是Lagrange乘子,它体现哪一个约束有效。
output输出优化信息。
例5-12  求下列函数最大值的最小化问题
 
其中: 
 
 
 
 
解:先建立目标函数文件,并保存为myfun.m:function f = myfun(x)
f(1)= 2*x(1)^2+x(2)^2-48*x(1)-40*x(2)+304; 
f(2)= -x(1)^2 - 3*x(2)^2;
f(3)= x(1) + 3*x(2) -18;
f(4)= -x(1)- x(2);
f(5)= x(1) + x(2) - 8;
然后,在命令窗口键入命令:
x0 = [0.1; 0.1];       % 初始值
[x,fval] = fminimax(@myfun,x0)
结果为:
x =
    4.0000
    4.0000
fval =
    0.0000  -64.0000   -2.0000   -8.0000   -0.0000
例5-13  求上述问题的绝对值的最大值最小化问题。
目标函数为: 
解:先建立目标函数文件(与上例相同)
然后,在命令窗口或编辑器中建立M文件:
>>x0 = [0.1; 0.1];        % 初始点
>>options = optimset('MinAbsMax',5);   % 指定绝对值的最小化
>>[x,fval] = fminimax(@myfun,x0,[ ],[ ],[ ],[ ],[ ],[ ],[ ],options)
则结果为
x =
    4.9256
    2.0796
fval =
   37.2356  -37.2356   -6.8357   -7.0052   -0.9948
5.6  多目标规划问题
多目标规划是指在一组约束下,对多个不同目标函数进行优化。它的一般形式为
 
sub.to     
其中: 。
在同一约束下,当目标函数处于冲突状态时,不存在最优解x使所有目标函数同时达到最优。此时,我们使用有效解,即如果不存在 ,使得 ,i=1,2,…m, 则称x*为有效解。
在MATLAB中,多目标问题的标准形式为
 
sub.to      
 
 
 
 
 
其中:x、b、beq、lb、ub是向量;A、Aeq为矩阵;C(x)、Ceq(x)和F(x)是返回向量的函数;F(x)、C(x)、Ceq(x)可以是非线性函数;weight为权值系数向量,用于控制对应的目标函数与用户定义的目标函数值的接近程度;goal为用户设计的与目标函数相应的目标函数值向量; 为一个松弛因子标量;F(x)为多目标规划中的目标函数向量。
在MATLAB5.x中,它的最优解由attgoal函数实现。
函数  fgoalattain
格式  x = fgoalattain(fun,x0,goal,weight)
x = fgoalattain(fun,x0,goal,weight,A,b)
x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq)
x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub)
x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon)
x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon,options)
[x,fval] = fgoalattain(…)
[x,fval,attainfactor] = fgoalattain(…)
[x,fval,attainfactor,exitflag] = fgoalattain(…)
[x,fval,attainfactor,exitflag,output] = fgoalattain(…)
[x,fval,attainfactor,exitflag,output,lambda] = fgoalattain(…)
参数说明:
x0为初始解向量;
fun为多目标函数的文件名字符串,其定义方式与前面fun的定义方式相同;
goal为用户设计的目标函数值向量;
weight为权值系数向量,用于控制目标函数与用户自定义目标值的接近程度;
A、b满足线性不等式约束 ,没有时取A=[ ],b=[ ];
Aeq、beq满足线性等式约束 ,没有时取Aeq=[ ],beq=[ ];
lb、ub为变量的下界和上界: ;
nonlcon的作用是通过接受的向量x来计算非线性不等约束 和等式约束 分别在x处的值C和Ceq,通过指定函数柄来使用。
如:>>x = fgoalattain(@myfun,x0,goal,weight,A,b,Aeq,beq,lb,ub,@mycon),先建立非线性约束函数,并保存为mycon.m:function  [C,Ceq] = mycon(x)
C = …    % 计算x处的非线性不等式约束 的函数值。
Ceq = …   % 计算x处的非线性等式约束 的函数值。
options为指定的优化参数;
fval为多目标函数在x处的值;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -