?? sdmdemo.m
字號:
function sdmdemo% SDMDEMO - demonstration of SeDuMi Interface 1.04%% This file is part of SeDuMi Interface 1.04 (JUL2002)% Last update : 23rd September 2002% Copyright (C) 2002 Dimitri Peaucelle & Krysten Taitz% LAAS-CNRS, Toulouse, France% % This program is free software; you can redistribute it and/or modify% it under the terms of the GNU General Public License as published by% the Free Software Foundation; either version 2 of the License, or% (at your option) any later version.% % This program is distributed in the hope that it will be useful,% but WITHOUT ANY WARRANTY; without even the implied warranty of% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the% GNU General Public License for more details.% % You should have received a copy of the GNU General Public License% along with this program; if not, write to the Free Software% Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. %#external header='Choose a demo'; item1='example of the User''s guide'; item2='a H2/Hinfinity state feedback example'; item = menu(header,item1,item2); next = sprintf('%s',' -- type key to continue -- '); dotline = '------------------------------------------------------'; switch item case 1 clc fprintf(['This demo is conceived to help the reader of the user''s' ... ' guide\n No comments are added to the matlab commands']); fprintf('\n%s',next);pause;fprintf('\r'); clc fprintf('#####################################\n'); fprintf('# 2.1 # LMC problem: an sdmpb object\n'); fprintf('#####################################\n\n'); do = sprintf('quiz = sdmpb(''Optimal Hinfty State-Feedback Synthesis'')'); fprintf('%s\n',do);eval(do); fprintf('\n%s',next);pause;fprintf('\r \n'); do = sprintf('whos quiz'); fprintf('%s\n',do);eval(do); fprintf('\n%s',next);pause;fprintf('\r \n'); do = sprintf(['n=4; m=1; q=1; p=2;\n', ... 'A = [1 0 0 -1 ; 0 -1 1 0 ; -1 0 1 0 ; 0 -1 0 1 ];\n', ... 'Bu = [ 1 ; 0 ; 0 ; 0 ];\n', ... 'Bw = [ 0 ; 1 ; 0 ; 0 ];\n', ... 'Cz = [ 0 0 0 1 ; 1 0 0 1 ];\n', ... 'Dzu = [ 1 ; 0 ];\n']); fprintf('%s\n',do);eval(do); fprintf('\n%s',next);pause;fprintf('\r \n'); clc fprintf('#####################################\n'); fprintf('# 2.2 # Defining variables: sdmvar\n'); fprintf('#####################################\n\n'); do = sprintf(['[quiz, Yindex] = sdmvar(quiz, m, n, ''Y'');\n', ... 'quiz']); fprintf('%s\n',do);eval(do); fprintf('\n%s',next);pause;fprintf('\r \n'); do = sprintf(['[quiz, gindex] = sdmvar(quiz, 1, 1, ''gamma^2'');\n', ... '[quiz, Qindex] = sdmvar(quiz, n, ''s'', ''Q'');\n', ... 'quiz']); fprintf('%s\n',do);eval(do); fprintf('\n%s',next);pause;fprintf('\r \n'); do = sprintf(['get(quiz, ''varnb'')']); fprintf('%s\n',do);eval(do); fprintf('\n%s',next);pause;fprintf('\r \n'); do = sprintf(['get(quiz, ''varname'', gindex)']); fprintf('%s\n',do);eval(do); fprintf('\n%s',next);pause;fprintf('\r \n'); do = sprintf(['get(quiz, ''vardec'', Qindex)']); fprintf('%s\n',do);eval(do); fprintf('\n%s',next);pause;fprintf('\r \n'); clc fprintf('###################################################\n'); fprintf('# 2.3 # Defining an inequality constraint: sdmlmi\n'); fprintf('###################################################\n\n'); do = sprintf(['[quiz, lmi1index] = sdmlmi( quiz, [n], ''Q>0'');\n', ... '[quiz, lmi2index] = sdmlmi(quiz, [n p], ''Hinfty state-feedback'');\n', ... 'quiz']); fprintf('%s\n',do);eval(do); fprintf('\n%s',next);pause;fprintf('\r \n'); do = 'get(quiz, ''ineqnb'')'; fprintf('%s\n',do);eval(do); fprintf('\n%s',next);pause;fprintf('\r \n'); do = 'get(quiz, ''ineqname'', lmi2index)'; fprintf('%s\n',do);eval(do); fprintf('\n%s',next);pause;fprintf(['\r \n']); do = 'get(quiz, ''ineqdim'', lmi2index)'; fprintf('%s\n',do);eval(do); fprintf('\n%s',next);pause;fprintf('\r \n'); clc fprintf('#########################################################\n'); fprintf('# 2.4 # Add a term to an inequality constraint: sdmineq\n'); fprintf('#########################################################\n\n'); do = sprintf(['L = Cz;\n', ... 'R = 1;\n', ... 'quiz = sdmineq(quiz, [lmi2index 2 1], Qindex, L, R); \n\n', ... 'L = Bw;\n', ... 'R = 0.5*L'';\n', ... 'quiz = sdmineq(quiz, [lmi2index 1 1], 0, L, R); \n\n', ... 'quiz = sdmineq(quiz, [lmi2index 1 1], Qindex, A, 1);\n\n',... 'quiz = sdmineq(quiz, [lmi2index 1 1], Yindex, Bu, 1);\n\n',... 'quiz = sdmineq(quiz, [lmi2index 2 1], Yindex, Dzu, 1);\n\n',... 'quiz = sdmineq(quiz, [lmi2index 2 2], gindex, -0.5, 1);\n\n', ... 'quiz = sdmineq(quiz, [lmi1index 1 1], Qindex, -0.5, 1);']); fprintf('%s\n',do);eval(do); fprintf('\n%s',next);pause;fprintf('\r \n'); clc fprintf('####################################################\n'); fprintf('# 2.5 # Add a linear term to the objective: sdmobj\n'); fprintf('####################################################\n\n'); do = sprintf(['quiz = sdmobj(quiz, gindex, -1, 1, ''-gamma^2'');\n', ... 'quiz']); fprintf('%s\n',do);eval(do); fprintf('\n%s',next);pause;fprintf('\r \n'); do = 'get(quiz,''objname'')'; fprintf('%s\n',do);eval(do); fprintf('\n%s',next);pause;fprintf('\r \n'); clc fprintf('#####################################\n'); fprintf('# 2.6 # Solve an LMC problem: sdmsol\n'); fprintf('#####################################\n\n'); do = sprintf(['quiz = sdmsol(quiz);']); fprintf('%s\n',do);eval(do); fprintf('\n%s',next);pause;fprintf('\r \n'); do = 'quiz'; fprintf('%s\n',do);eval(do); fprintf('\n%s',next);pause;fprintf('\r \n'); do = 'get(quiz, ''feas'')'; fprintf('%s\n',do);eval(do); fprintf('\n%s',next);pause;fprintf('\r \n'); clc fprintf('##########################################\n'); fprintf('# 2.7 # Extracting the computed solution\n'); fprintf('##########################################\n\n'); do = sprintf(['g2_opt = get(quiz, ''varvalue'', gindex)']); fprintf('%s\n',do);eval(do); fprintf('\n%s',next);pause;fprintf('\r \n'); do = 'Y_opt = quiz(Yindex)'; fprintf('%s\n',do);eval(do); fprintf('\n%s',next);pause;fprintf('\r \n'); do = 'get(quiz,''objopt'')'; fprintf('%s\n',do);eval(do); fprintf('\n%s',next);pause;fprintf('\r \n'); clc fprintf('###########################################\n'); fprintf('# 2.8 # Analysis of the computed solution\n'); fprintf('###########################################\n\n'); do = 'get(quiz, ''ineqmeig'', lmi1index)'; fprintf('%s\n',do);eval(do); fprintf('\n%s',next);pause;fprintf('\r \n'); do = 'quiz'; fprintf('%s\n',do);eval(do); fprintf('\n%s',next);pause;fprintf('\r \n'); clc fprintf('######################################\n'); fprintf('# 3.1 # Structured variables: sdmvar\n'); fprintf('######################################\n\n'); do = sprintf(['[quiz, Dindex] = sdmvar(quiz, 3i, ''d'', ''D : diagonal'');\n',... 'num2str(quiz{Dindex})']); fprintf('%s\n',do);eval(do); fprintf('\n%s',next);pause;fprintf('\r \n'); do = sprintf(['[quiz, Gindex] = sdmvar(quiz, 3, ''as'', ''G'');\n',... 'quiz{Gindex}']); fprintf('%s\n',do);eval(do); fprintf('\n%s',next);pause;fprintf('\r \n'); do = sprintf(['[quiz, Hindex] = sdmvar(quiz, 2i, ''h'', ''H'');\n',... 'num2str(quiz{Hindex})']); fprintf('%s\n',do);eval(do); fprintf('\n%s',next);pause;fprintf('\r \n'); do = sprintf(['[quiz, Jindex] = sdmvar(quiz, 3i, ''ah'', ''J'');\n',... 'num2str(quiz{Jindex})']); fprintf('%s\n',do);eval(do); fprintf('\n%s',next);pause;fprintf('\r \n'); do = sprintf(['Ddec = quiz{Dindex};\n',... 'Ddecbar = conj(Ddec);\n',... 'Gdec = quiz{Gindex};\n',... 'Fdec = [ Ddecbar , Gdec ];\n',... '[quiz, Findex] = sdmvar(quiz, Fdec, ''st'', ''[D, G]'');\n',... 'num2str(quiz{Findex})']); fprintf('%s\n',do);eval(do); fprintf('\n%s',next);pause;fprintf('\r \n'); do = sprintf(['get(quiz, ''vardecnb'')']); fprintf('%s\n',do);eval(do); do = sprintf(['Kdec = [28+28i 0 -28-28i;30+30i 29 30-30i];\n',... '[quiz, Kindex] = sdmvar(quiz, Kdec, ''st'', ''K'');\n',... 'num2str(quiz{Kindex})']); fprintf('%s\n',do);eval(do); fprintf('\n%s',next);pause;fprintf('\r \n'); clc fprintf('#################################################\n'); fprintf('# 3.3.1 # Defining an equality constraint: sdmlme\n'); fprintf('#################################################\n\n'); do = sprintf(['[quiz, lmeindex] = sdmlme(quiz, [2 1], [3 1], ''[K 0;0 Q11]=[H 0;0 conj(D11)-1+i]'');\n',... 'quiz']); fprintf('%s\n',do);eval(do); do = 'get(quiz, ''eqnb'')'; fprintf('\n%s',next);pause;fprintf('\r \n'); fprintf('%s\n',do);eval(do); do = 'get(quiz, ''eqdimrow'', lmeindex)'; fprintf('%s\n',do);eval(do); fprintf('\n%s',next);pause;fprintf('\r \n'); do = 'get(quiz, ''eqdimcol'', lmeindex)'; fprintf('%s\n',do);eval(do); fprintf('\n%s',next);pause;fprintf('\r \n'); do = 'get(quiz, ''eqname'', lmeindex)'; fprintf('%s\n',do);eval(do); fprintf('\n%s',next);pause;fprintf('\r \n'); clc fprintf('#####################################################\n'); fprintf('# 3.3.2 # Add a term to an equality constraint: sdmeq\n'); fprintf('#####################################################\n\n'); do = sprintf(['%% ADVANCED USAGE USED AT THIS STEP\n\n',... 'quiz = sdmeq(quiz, [ lmeindex 1 1], Kindex);\n',... 'quiz = sdmeq(quiz, [-lmeindex 1 1], Hindex, 1, [i i 0 ; 0 0 1]);\n',... 'quiz = sdmeq(quiz, [-lmeindex 1 1], 0, 1, [2i i 0 ; 0 0 0]);\n',... 'quiz = sdmeq(quiz, [ lmeindex 2 2], Qindex, [1 0 0 0]);\n',... 'quiz = sdmeq(quiz, [ lmeindex 2 2], 0, -1, 1-i);\n',... 'quiz = sdmeq(quiz, [-lmeindex 2 2], i*Dindex, [1 0 0]);']); fprintf('%s\n',do);eval(do); fprintf('\n%s',next);pause;fprintf('\r \n'); do = sprintf(['quiz = sdmsol(quiz)']); fprintf('%s\n',do);eval(do); fprintf('\n%s',next);pause;fprintf('\r \n'); do = sprintf(['get(quiz, ''eqnorm'', lmeindex)\n',... 'K_opt = quiz(Kindex)']); fprintf('%s\n',do);eval(do); fprintf('\n%s',next);pause;fprintf('\r \n'); clc fprintf('##############################################\n'); fprintf('# 3.5 # Set a value to some variable: sdmset\n'); fprintf('##############################################\n\n'); do = sprintf(['quiz = sdmset(quiz, gindex, 30);\n',... 'quiz = sdmsol(quiz);']); fprintf('%s\n',do);eval(do); fprintf('\n%s',next);pause;fprintf('\r \n'); do = 'quiz'; fprintf('%s\n',do);eval(do); fprintf('\n%s',next);pause;fprintf('\r \n'); do = 'quiz(gindex)'; fprintf('%s\n',do);eval(do); fprintf('\n%s',next);pause;fprintf('\r \n'); do = sprintf(['quiz = sdmset(quiz, Gindex, [0 -1 1 ; 1 0 2 ; -1 -2 0]);\n',... 'quiz{Gindex}']); fprintf('%s\n',do);eval(do); fprintf('\n%s',next);pause;fprintf('\r \n'); do = 'num2str(quiz{Findex})'; fprintf('%s\n',do);eval(do); fprintf('\n%s',next);pause;fprintf('\r \n'); case 2 next1= 'fprintf(''%s\n'',write);fprintf(''\n%s'',next);pause;'; next2 = 'clc;fprintf(''%s\n\n'',dotline);fprintf(''%s\n'',write);fprintf(''%s\n\n'',dotline);'; clc;fprintf('%s\n\n',dotline); write=sprintf(['Consider the following LTI system \n\n',... '\t dx/dt = A .x + B1.w1 + B2.w2 + B .u\n',... '\t z1 = C1.x + D1.w1 + E1.u\n',... '\t z2 = C2.x + E2.u\n\n',... 'with the following dimensions: \n\n',...
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -