Mercurial > hg > ltpda
view m-toolbox/html_help/help/ug/ssm_modify_content.html @ 0:f0afece42f48
Import.
author | Daniele Nicolodi <nicolodi@science.unitn.it> |
---|---|
date | Wed, 23 Nov 2011 19:22:13 +0100 |
parents | |
children |
line wrap: on
line source
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=windows-1252"> <TITLE></TITLE> <META NAME="GENERATOR" CONTENT="OpenOffice.org 3.1 (Win32)"> <META NAME="CREATED" CONTENT="0;0"> <META NAME="CHANGEDBY" CONTENT="Adrien G"> <META NAME="CHANGED" CONTENT="20090828;15564200"> </HEAD> <BODY LANG="en-US" DIR="LTR"> <P>Built-in models enable to build fast predefined models to use later in simulations. </P> <H2>Modifying using the setter functions</H2> <P><FONT COLOR="#000000">It is possible to set the content of the fields “input”, “output”, “states”, as well as the field “params”.</FONT></P> <P><FONT COLOR="#000000">Here is a simple model</FONT></P> <DIV CLASS="fragment"><PRE><FONT COLOR="#000000">>> name = </FONT><FONT COLOR="#a020f0">'sys'</FONT><FONT COLOR="#000000">;</FONT> >> timestep = 0; >> amats = cell(3,3); >> bmats = cell(3,3); >> cmats = cell(3,3); >> dmats = cell(3,3); <FONT COLOR="#000000">>> amats{1,1} = -(sym(</FONT><FONT COLOR="#a020f0">'OMEGA'</FONT><FONT COLOR="#000000">));</FONT> >> amats{2,2} = -2; >> amats{3,3} = [0 1 ; -0.05 -0.01]; >> amats{3,1} = [-1;-3]; >> bmats{1,1} = 1; >> bmats{2,2} = 2; >> bmats{3,3} = 3*eye(2); >> cmats{1,1} = 1; >> cmats{2,2} = 1; >> cmats{3,3} = eye(2); >> dmats{1,3} = [6 6]; >> dmats{2,1} = 6; >> dmats{3,2} = [6;6]; <FONT COLOR="#000000">>> sys = ssm(plist( </FONT><FONT COLOR="#0000ff">...</FONT> <FONT COLOR="#a020f0">'amats'</FONT><FONT COLOR="#000000">,amats, </FONT><FONT COLOR="#a020f0">'bmats'</FONT><FONT COLOR="#000000">,bmats, </FONT><FONT COLOR="#a020f0">'cmats'</FONT><FONT COLOR="#000000">,cmats, </FONT><FONT COLOR="#a020f0">'dmats'</FONT><FONT COLOR="#000000">,dmats, </FONT><FONT COLOR="#0000ff">...</FONT> <FONT COLOR="#a020f0">'timestep'</FONT><FONT COLOR="#000000">,timestep, </FONT><FONT COLOR="#a020f0">'name'</FONT><FONT COLOR="#000000">,name));</FONT> <FONT COLOR="#000000">>> sys.setParams(plist({</FONT><FONT COLOR="#a020f0">'OMEGA'</FONT><FONT COLOR="#000000">, </FONT><FONT COLOR="#a020f0">'system frequency'</FONT><FONT COLOR="#000000">}, 2))</FONT> <FONT SIZE=2><FONT FACE="Courier New, monospace"><FONT COLOR="#000000">M: running ssm/ssm</FONT></FONT></FONT> M: running ssmFromDescription M: running validate M: running ssm/setParams M: running display ------ ssm/1 ------- amats: { [1x1] [] [] [] [1x1] [] [2x1] [] [2x2] } [3x3] mmats: { [1x1] [] [] [] [1x1] [] [] [] [2x2] } [3x3] bmats: { [1x1] [] [] [] [1x1] [] [] [] [2x2] } [3x3] cmats: { [1x1] [] [] [] [1x1] [] [] [] [2x2] } [3x3] dmats: { [] [] [1x2] [1x1] [] [] [] [2x1] [] } [3x3] timestep: 0 inputs: [1x3 ssmblock] 1 : input 1 | input 1 > 1 [] 2 : input 2 | input 2 > 1 [] 3 : input 3 | input 3 > 1 [], input 3 > 2 [] states: [1x3 ssmblock] 1 : state 1 | state 1 > 1 [] 2 : state 2 | state 2 > 1 [] 3 : state 3 | state 3 > 1 [], state 3 > 2 [] outputs: [1x3 ssmblock] 1 : output 1 | output 1 > 1 [] 2 : output 2 | output 2 > 1 [] 3 : output 3 | output 3 > 1 [], output 3 > 2 [] params: (OMEGA=2) [1x1 plist] version: $Id: ssm_modify_content.html,v 1.2 2009/08/28 15:11:53 adrien Exp $ Ninputs: 3 inputsizes: [1 1 2] Noutputs: 3 outputsizes: [1 1 2] Nstates: 3 statesizes: [1 1 2] Nparams: 1 isnumerical: false hist: ssm.hist [1x1 history] procinfo: (empty-plist) [1x1 plist] plotinfo: (empty-plist) [1x1 plist] name: sys description: mdlfile: UUID: 227fd0a2-1de0-4e01-855f-d0548e1eb1ff --------------------</PRE></DIV><P> <BR><BR> </P> <P>In then we set the names and descriptions of the input blocks, the names, descriptions and units of the port variables:</P> <DIV CLASS="fragment"><PRE><FONT COLOR="#000000">>> sys.setBlockNames(plist(</FONT><FONT COLOR="#a020f0">'field'</FONT><FONT COLOR="#000000">, </FONT><FONT COLOR="#a020f0">'inputs'</FONT><FONT COLOR="#000000">, </FONT><FONT COLOR="#a020f0">'blocks'</FONT><FONT COLOR="#000000">, [1 2 3], </FONT><FONT COLOR="#a020f0">'names'</FONT><FONT COLOR="#000000">, {</FONT><FONT COLOR="#a020f0">'myinput1'</FONT><FONT COLOR="#000000">,</FONT><FONT COLOR="#a020f0">'myinput2'</FONT><FONT COLOR="#000000">,</FONT><FONT COLOR="#a020f0">'myinput3'</FONT><FONT COLOR="#000000">} ));</FONT> <FONT COLOR="#000000">>> sys.setBlockDescriptions(plist(</FONT><FONT COLOR="#a020f0">'field'</FONT><FONT COLOR="#000000">, </FONT><FONT COLOR="#a020f0">'inputs'</FONT><FONT COLOR="#000000">, </FONT><FONT COLOR="#a020f0">'blocks'</FONT><FONT COLOR="#000000">, {</FONT><FONT COLOR="#a020f0">'myinput1'</FONT><FONT COLOR="#000000">}, </FONT><FONT COLOR="#a020f0">'descriptions'</FONT><FONT COLOR="#000000">,{</FONT><FONT COLOR="#a020f0">'myinput1 description'</FONT><FONT COLOR="#000000">} ));</FONT> <FONT COLOR="#000000">>> sys.setPortNames(plist(</FONT><FONT COLOR="#a020f0">'field'</FONT><FONT COLOR="#000000">, </FONT><FONT COLOR="#a020f0">'inputs'</FONT><FONT COLOR="#000000">, </FONT><FONT COLOR="#a020f0">'block'</FONT><FONT COLOR="#000000">, {</FONT><FONT COLOR="#a020f0">'myinput3'</FONT><FONT COLOR="#000000">}, </FONT><FONT COLOR="#a020f0">'ports'</FONT><FONT COLOR="#000000">, [1 2], </FONT><FONT COLOR="#a020f0">'names'</FONT><FONT COLOR="#000000">,{</FONT><FONT COLOR="#a020f0">'my port 3-1'</FONT><FONT COLOR="#000000"> </FONT><FONT COLOR="#a020f0">'my port 3-2'</FONT><FONT COLOR="#000000">} ));</FONT> <FONT COLOR="#000000">>> sys.setPortDescriptions(plist(</FONT><FONT COLOR="#a020f0">'field'</FONT><FONT COLOR="#000000">, </FONT><FONT COLOR="#a020f0">'inputs'</FONT><FONT COLOR="#000000">, </FONT><FONT COLOR="#a020f0">'block'</FONT><FONT COLOR="#000000">, {</FONT><FONT COLOR="#a020f0">'myinput3'</FONT><FONT COLOR="#000000">}, </FONT><FONT COLOR="#a020f0">'ports'</FONT><FONT COLOR="#000000">, [1 2], </FONT><FONT COLOR="#a020f0">'descriptions'</FONT><FONT COLOR="#000000">,{</FONT><FONT COLOR="#a020f0">'first description'</FONT><FONT COLOR="#000000"> </FONT><FONT COLOR="#a020f0">'second description'</FONT><FONT COLOR="#000000">} ));</FONT> <FONT COLOR="#000000">>> sys.setPortUnits(plist(</FONT><FONT COLOR="#a020f0">'field'</FONT><FONT COLOR="#000000">, </FONT><FONT COLOR="#a020f0">'inputs'</FONT><FONT COLOR="#000000">, </FONT><FONT COLOR="#a020f0">'block'</FONT><FONT COLOR="#000000">, {</FONT><FONT COLOR="#a020f0">'myinput3'</FONT><FONT COLOR="#000000">}, </FONT><FONT COLOR="#a020f0">'ports'</FONT><FONT COLOR="#000000">, [1 2], </FONT><FONT COLOR="#a020f0">'units'</FONT><FONT COLOR="#000000">, [unit(</FONT><FONT COLOR="#a020f0">'kg m^-2'</FONT><FONT COLOR="#000000">) unit(</FONT><FONT COLOR="#a020f0">'m'</FONT><FONT COLOR="#000000">)] ));</FONT> >> sys.inputs M: running ssm/setBlockNames M: running ssm/setBlockDescriptions M: running ssm/setPortNames ------ ssmport/1 ------- name: my port 3-1 units: [] [1x1 unit] description: version: $Id: ssm_modify_content.html,v 1.2 2009/08/28 15:11:53 adrien Exp $ ------------------------ ------ ssmport/2 ------- name: my port 3-2 units: [] [1x1 unit] description: version: $Id: ssm_modify_content.html,v 1.2 2009/08/28 15:11:53 adrien Exp $ ------------------------ M: running ssm/setPortDescriptions ------ ssmport/1 ------- name: my port 3-1 units: [] [1x1 unit] description: first description version: $Id: ssm_modify_content.html,v 1.2 2009/08/28 15:11:53 adrien Exp $ ------------------------ ------ ssmport/2 ------- name: my port 3-2 units: [] [1x1 unit] description: second description version: $Id: ssm_modify_content.html,v 1.2 2009/08/28 15:11:53 adrien Exp $ ------------------------ M: running ssm/setPortUnits ------ ssmblock/1 ------- name: myinput1 ports: input 1 > 1 [] [1x1 ssmport] description: myinput1 description version: $Id: ssm_modify_content.html,v 1.2 2009/08/28 15:11:53 adrien Exp $ ------------------------- ------ ssmblock/2 ------- name: myinput2 ports: input 2 > 1 [] [1x1 ssmport] description: version: $Id: ssm_modify_content.html,v 1.2 2009/08/28 15:11:53 adrien Exp $ ------------------------- ------ ssmblock/3 ------- name: myinput3 ports: my port 3-1 [kg m^(-2)], my port 3-2 [m] [1x2 ssmport] description: version: $Id: ssm_modify_content.html,v 1.2 2009/08/28 15:11:53 adrien Exp $ <FONT SIZE=2><FONT FACE="Courier New, monospace"><FONT COLOR="#000000">-------------------------</FONT></FONT></FONT></PRE></DIV><H2> Modifying the parameter values</H2> <P>Once the parameter field “params” is set, one may want to set or modify (like in an optimizer) the parameter values. This is done by the functions “*Parameters.m”. The function setParameters takes two inputs ('setnames' and 'setvalues') which are the names of the parameters to modify and the values assigned to them.</P> <DIV CLASS="fragment"><PRE>>> sys.params <FONT COLOR="#000000">>> sys.setParameters(</FONT><FONT COLOR="#a020f0">'OMEGA'</FONT><FONT COLOR="#000000">, 0.002);</FONT> >> sys.params ----------- plist 01 ----------- n params: 1 ---- param 1 ---- key: OMEGA val: 2 desc: system frequency ----------------- description: UUID: 84ff1ed8-eee2-406c-89d8-7e6e703d36dd -------------------------------- M: running setParameters M: running ssm/ssm ----------- plist 01 ----------- n params: 1 ---- param 1 ---- key: OMEGA val: 0.002 desc: system frequency ----------------- description: UUID: 84ff1ed8-eee2-406c-89d8-7e6e703d36dd --------------------------------</PRE></DIV><P> The function subsParameterskeep and Parameters substitute numerical values to the symbolic expressions, using a list of the parameters to substitute (or its complementary). All parameters substituted are removed from the “params” field. The call <system>.keepParameters substitues all the parameters. The field isnumerical is then set to 1, unless a parameter in the matrices was forgotten in the params field.</P> <DIV CLASS="fragment"><PRE>>> sys.keepParameters; >> sys.params >> sys.isNumeric M: running keepParameters ----------- plist 01 ----------- n params: 0 description: UUID: 84ff1ed8-eee2-406c-89d8-7e6e703d36dd -------------------------------- ans = 1</PRE></DIV><H2> Modifying the inputs/states/outputs</H2> <P><FONT COLOR="#000000">Les us first build a simple system constituted of four parallel 1</FONT><FONT COLOR="#000000"><SUP>st</SUP></FONT><FONT COLOR="#000000"> order systems.</FONT></P> <DIV CLASS="fragment"><PRE><FONT COLOR="#000000">>> name = </FONT><FONT COLOR="#a020f0">'sys'</FONT><FONT COLOR="#000000">;</FONT> >> timestep = 0; >> amats = {diag([-1 -2 -3 -4])}; >> bmats = {diag([1 2 0 0])}; >> cmats = {[diag([1 0 3 0]) ; [0 0 0 0 ]]}; >> dmats = {[diag([0 0 0 0]) ; [0 0 0 0 ]]}; <FONT COLOR="#000000">>> sys = ssm(plist( </FONT><FONT COLOR="#0000ff">...</FONT> <FONT COLOR="#a020f0">'amats'</FONT><FONT COLOR="#000000">,amats, </FONT><FONT COLOR="#a020f0">'bmats'</FONT><FONT COLOR="#000000">,bmats, </FONT><FONT COLOR="#a020f0">'cmats'</FONT><FONT COLOR="#000000">,cmats, </FONT><FONT COLOR="#a020f0">'dmats'</FONT><FONT COLOR="#000000">,dmats, </FONT><FONT COLOR="#0000ff">...</FONT> <FONT COLOR="#a020f0">'timestep'</FONT><FONT COLOR="#000000">,timestep, </FONT><FONT COLOR="#a020f0">'name'</FONT><FONT COLOR="#000000">,name));</FONT> <FONT COLOR="#000000">It is possible to obtain the structural realization of the system using sMinReal. This function deletes states which are either not observable or controllable. However, there may still exist such linear combinations of states.</FONT> <FONT COLOR="#000000">The process only modify the states, here the 2</FONT><FONT COLOR="#000000"><SUP>nd</SUP></FONT><FONT COLOR="#000000"> and 4rt states disappear since they are not observable, and the 3</FONT><FONT COLOR="#000000"><SUP>rd</SUP></FONT><FONT COLOR="#000000"> and 4</FONT><FONT COLOR="#000000"><SUP>th</SUP></FONT><FONT COLOR="#000000"> disappear since they are not controllable.</FONT> >> sys.sMinReal M: running ssm/ssm M: running ssmFromDescription M: running validate M: running ssm/sMinReal M: running display ------ ssm/1 ------- amats: { [1x1] } [1x1] mmats: { [1x1] } [1x1] bmats: { [1x4] } [1x1] cmats: { [5x1] } [1x1] dmats: { [] } [1x1] timestep: 0 inputs: [1x1 ssmblock] 1 : input 1 | input 1 > 1 [], input 1 > 2 [], input 1 > 3 [], input 1 > 4 [] states: [1x1 ssmblock] 1 : state 1 | state 1 > 1 [] outputs: [1x1 ssmblock] 1 : output 1 | output 1 > 1 [], output 1 > 2 [], output 1 > 3 [], output 1 > 4 [], output 1 > 5 [] params: (empty-plist) [1x1 plist] version: $Id: ssm_modify_content.html,v 1.2 2009/08/28 15:11:53 adrien Exp $ Ninputs: 1 inputsizes: 4 Noutputs: 1 outputsizes: 5 Nstates: 1 statesizes: 1 Nparams: 0 isnumerical: true hist: ssm.hist [1x1 history] procinfo: (empty-plist) [1x1 plist] plotinfo: (empty-plist) [1x1 plist] name: sys description: mdlfile: UUID: 349cd9c4-ad91-4151-b542-63d34b01bed8 --------------------</PRE></DIV><P> Then we can work on the input/outputs to simplify the model.</P> <P>The user must specify which block variable he want to keep, and three syntaxes are allowed. </P> <UL> <LI><P>'ALL' meaning all ports in all blocks are kept</P> <LI><P>{<varname1> <varname2> …} giving the name of each port to keep, in this case one must ensure ports of different blocks have different names.</P> <LI><P>{<logical index for block1> <double index for block2> <varnames cellstr for block3> “ALL” “NONE”} using a different index for each individual block.</P> </UL> <P>This syntax is also used for any converter to select the inputs and outputs in the ssm.</P> <P>It is important to note that this removes lines and columns in the system's matrices, but no parameters are removed. So second order parameters that should be remove (by setting them to a neutral value) must be taken care of separately.</P> <DIV CLASS="fragment"><PRE><FONT FACE="Courier New, monospace"><FONT COLOR="#000000">>> sys.simplify(plist(</FONT><FONT COLOR="#a020f0">'inputs'</FONT><FONT COLOR="#000000">, {[1 2]} , </FONT><FONT COLOR="#a020f0">'states'</FONT><FONT COLOR="#000000">, </FONT><FONT COLOR="#a020f0">'ALL'</FONT><FONT COLOR="#000000"> , </FONT><FONT COLOR="#a020f0">'outputs'</FONT><FONT COLOR="#000000">, { </FONT><FONT COLOR="#a020f0">'output 1 > 1'</FONT><FONT COLOR="#000000"> </FONT><FONT COLOR="#a020f0">'output 1 > 4'</FONT><FONT COLOR="#000000">}))</FONT></FONT> <FONT FACE="Courier New, monospace"><FONT COLOR="#000000"><FONT SIZE=2>M: running ssm/simplify</FONT></FONT></FONT> <FONT FACE="Courier New, monospace">M: running ssm/ssm</FONT> <FONT FACE="Courier New, monospace">M: running ssm/simplify</FONT> <FONT FACE="Courier New, monospace">M: running display</FONT> <FONT FACE="Courier New, monospace">------ ssm/1 -------</FONT> <FONT FACE="Courier New, monospace">amats: { [1x1] } [1x1]</FONT> <FONT FACE="Courier New, monospace">mmats: { [1x1] } [1x1]</FONT> <FONT FACE="Courier New, monospace">bmats: { [1x2] } [1x1]</FONT> <FONT FACE="Courier New, monospace">cmats: { [2x1] } [1x1]</FONT> <FONT FACE="Courier New, monospace">dmats: { [] } [1x1]</FONT> <FONT FACE="Courier New, monospace">timestep: 0</FONT> <FONT FACE="Courier New, monospace">inputs: [1x1 ssmblock]</FONT> <FONT FACE="Courier New, monospace">1 : input 1 | input 1 > 1 [], input 1 > 2 []</FONT> <FONT FACE="Courier New, monospace">states: [1x1 ssmblock]</FONT> <FONT FACE="Courier New, monospace">1 : state 1 | state 1 > 1 []</FONT> <FONT FACE="Courier New, monospace">outputs: [1x1 ssmblock]</FONT> <FONT FACE="Courier New, monospace">1 : output 1 | output 1 > 1 [], output 1 > 4 []</FONT> <FONT FACE="Courier New, monospace">params: (empty-plist) [1x1 plist]</FONT> <FONT FACE="Courier New, monospace">version: $Id: ssm_modify_content.html,v 1.2 2009/08/28 15:11:53 adrien Exp $</FONT> <FONT FACE="Courier New, monospace">Ninputs: 1</FONT> <FONT FACE="Courier New, monospace">inputsizes: 2</FONT> <FONT FACE="Courier New, monospace">Noutputs: 1</FONT> <FONT FACE="Courier New, monospace">outputsizes: 2</FONT> <FONT FACE="Courier New, monospace">Nstates: 1</FONT> <FONT FACE="Courier New, monospace">statesizes: 1</FONT> <FONT FACE="Courier New, monospace">Nparams: 0</FONT> <FONT FACE="Courier New, monospace">isnumerical: true</FONT> <FONT FACE="Courier New, monospace">hist: ssm.hist [1x1 history]</FONT> <FONT FACE="Courier New, monospace">procinfo: (empty-plist) [1x1 plist]</FONT> <FONT FACE="Courier New, monospace">plotinfo: (empty-plist) [1x1 plist]</FONT> <FONT FACE="Courier New, monospace">name: sys</FONT> <FONT FACE="Courier New, monospace">description: </FONT> <FONT FACE="Courier New, monospace">mdlfile: </FONT> <FONT FACE="Courier New, monospace">UUID: 8e55110a-eb07-44d2-aaee-4f839a5fb155</FONT> <FONT FACE="Courier New, monospace">--------------------</FONT> </PRE></DIV> </BODY> </HTML>