Initial commit
[pftoolbox.git] / expressions / @xsymbolic / xsymbolic.m
blob7e19cdb91825798aac87eb4b65bac9a714a5e33d
1 function obj=xsymbolic(varargin)\r
2 % Holds an inline object, a symbolic expression or just a string.\r
3 % Will be treated as inlines internally.\r
4 %\r
5 % Syntax: (* = optional)\r
6 %\r
7 % obj = xsymbolic(expression, xvars*, uvars*, wvars*);\r
8 %\r
9 % In arguments:\r
10 %\r
11 % 1. expression\r
12 %       An inline object, a symbolic expression or a string.\r
13 % 2* xvars\r
14 %       A cell array containing the names of the states.\r
15 % 2* []\r
16 %       'xvars' is set to {'x1', 'x2', 'x3', ...}\r
17 % 3* uvars\r
18 %       A cell array containing the name of the elements forming u(t).\r
19 % 3* []\r
20 %       'uvars' is set to {'u1', 'u2', 'u3', ...}\r
21 % 4* wvars\r
22 %       A cell array containing the name of the elements forming w(t).\r
23 % 4* []\r
24 %       'wvars' is set to {'w1', 'w2', 'w3', ...}\r
25 %\r
26 % Out arguments:\r
27 %\r
28 % 1. obj\r
29 %       The resulting data object.\r
31 % Toolbox for nonlinear filtering.\r
32 % Copyright (C) 2005  Jakob Rosén <jakob.rosen@gmail.com>\r
33 %\r
34 % This program is free software; you can redistribute it and/or\r
35 % modify it under the terms of the GNU General Public License\r
36 % as published by the Free Software Foundation; either version 2\r
37 % of the License, or (at your option) any later version.\r
38 %\r
39 % This program is distributed in the hope that it will be useful,\r
40 % but WITHOUT ANY WARRANTY; without even the implied warranty of\r
41 % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
42 % GNU General Public License for more details.\r
43 %\r
44 % You should have received a copy of the GNU General Public License\r
45 % along with this program; if not, write to the Free Software\r
46 % Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.\r
48 if nargin==0\r
49         % Empty constructor\r
50         expression={};\r
51 elseif isa(varargin{1},'xsymbolic')\r
52         % Copy constructor\r
53         obj = varargin{1};      %Copy\r
54         return;                 %Exit\r
55 else\r
56         expression=varargin{1};\r
57 end\r
59 if isempty(expression)\r
60         % Either the empty constructor was called, or the user supplied an\r
61         % empty inargument;\r
62         obj.expression={};\r
63         obj.intexpr=[];\r
64         obj.str='';\r
65         obj.exprsize=[0,0];\r
66         obj.gradx=[];\r
67         obj.gradw=[];\r
68         obj.xvars={};\r
69         obj.uvars={};\r
70         obj.wvars={};\r
71         obj.islinear=false;\r
72         obj.wchar='w';\r
73         obj.description='Symbolic expression';\r
74         obj.wvars_auto=true;    % PRIVATE\r
75         obj=class(obj,'xsymbolic');\r
76 else\r
77         % Ok, the expression is not empty. Let's move on!\r
79         wchar='w';              % For use in the future\r
81         % Calculate the amount of subexpressions\r
82         if isa(expression,'cell')\r
83                 n=length(expression);\r
84         else\r
85                 % A single object was supplied\r
86                 n=1;\r
87                 expression={expression};\r
88         end;\r
89         xvars={};\r
90         uvars={};\r
91         wvars={};\r
93         if nargin>=2; xvars=varargin{2}; end;\r
94         if nargin>=3; uvars=varargin{3}; end;\r
95         if nargin>=4; wvars=varargin{4}; end;\r
97         % Convert all subexpressions to char\r
98         charexpr=convert2char(expression);\r
100         % If *vars is empty, calculate default values.\r
101         if isempty(xvars); xvars=getvars(charexpr,'x'); end;\r
102         if isempty(wvars);\r
103                 wvars=getvars(charexpr,'w');\r
104                 wvars_auto=true;\r
105         else\r
106                 wvars_auto=false;\r
107         end\r
108         if isempty(uvars); uvars=getvars(charexpr,'u'); end;\r
110         % Generate the internal expression, for use with the feval command.\r
111         intexpr=char2oneline(ext2int(charexpr,xvars,'x',wvars,'w',uvars,'u')');\r
113         obj.expression=expression;\r
114         obj.intexpr=intexpr;\r
115         obj.str=expr2str(expression);\r
116         obj.exprsize=[n,0];\r
117         obj.gradx=[];\r
118         obj.gradw=[];\r
119         obj.xvars=xvars;\r
120         obj.uvars=uvars;\r
121         obj.wvars=wvars;\r
122         obj.islinear=false;\r
123         obj.wchar='w';\r
124         obj.description='Symbolic expression';\r
125         obj.wvars_auto=wvars_auto;      % PRIVATE\r
126         obj=class(obj,'xsymbolic');\r
127 end\r