11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
# Inform user
echo Creating $1_obs.m
# Remove the old log file
rm -f obs_r2m.log
rm -f $1_obs.m?
# Use reduce to accomplish the transformation
$SYMBOLIC >obs_r2m.log << EOF
%Read the reduce definitions file
in "$1_def.r";
|
>
>
>
>
>
|
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
# Inform user
echo Creating $1_obs.m
# Remove the old log file
rm -f obs_r2m.log
rm -f $1_obs.m?
rm -f $1_obsa.m
# Is the system affine (look in the _obs.r file
affine=`grep 'affine :=' $1_obs.r | awk '{print $3}' | sed 's/;//'`
# Use reduce to accomplish the transformation
$SYMBOLIC >obs_r2m.log << EOF
%Read the reduce definitions file
in "$1_def.r";
|
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
ON BigFloat, NumVal;
PRECISION 16; %Compatible with Matlab
OFF Nat;
ON NERO; % Suppress zero elements
mtt_matrix := MTTYY;
mtt_matrix_n := MTTNY*(MTTGPCNy+1);
mtt_matrix_m := 1;
mtt_matrix_name := Y;
in"$MTTPATH/trans/matlab_matrix.r";
OUT "$1_obs.m1";
write "function Y = $1_obs(x,u)";
write "%GPC O function in matlab form for system $1;;";
write "%File $1_obs.m;;";
write "%Generated by MTT;;";
write "%";
write "% Set up the State variables";
FOR i := 1:MTTNx DO
BEGIN
write "mttx", i, " = x(", i, ");";
END;
write "%";
write "% Set up the inputs and input derivatives";
FOR i := 1:MTTNu DO
BEGIN
write "mttu", i, " = u(", i, ",1);";
FOR j := 1:MTTGPCNu DO
BEGIN
write "mttu", i,j, " = u(", i, ",", j+1, ");";
END;
END;
write "%";
write "% Set up the Y matrix";
write "Y = zeros(", mtt_matrix_n, ",1);";
SHUT "$1_obs.m1";
GENTRANOUT "$1_obs.m3";
write "%";
write "% Translate the expression for Y";
matlab_matrix();
GENTRANSHUT "$1_obs.m3";
EOF
# Create the globals
sympar2global_txt2m $1> $1_obs.m2
# Change name
echo 'Y = mtt_matrix;' > $1_obs.m4
# Put together the pieces
cat $1_obs.m? >$1_obs.m
rm -f $1_obs.m?
|
|
<
<
<
|
<
<
<
<
<
<
>
>
|
|
|
>
|
>
>
|
>
>
>
>
>
>
|
>
>
>
>
>
>
|
>
>
>
>
>
>
>
>
>
|
>
|
>
|
>
>
|
>
<
<
>
>
>
>
>
|
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
ON BigFloat, NumVal;
PRECISION 16; %Compatible with Matlab
OFF Nat;
ON NERO; % Suppress zero elements
% Matrix output function
in"$MTTPATH/trans/matlab_matrix.r";
OUT "$1_obs.m2";
write "% Set up the State variables";
FOR i := 1:MTTNx DO
BEGIN
write "mttx", i, " = x(", i, ");";
END;
IF affine=0 THEN
BEGIN
write "%";
write "% Set up the inputs and input derivatives";
FOR i := 1:MTTNu DO
BEGIN
write "mttu", i, " = u(", i, ",1);";
FOR j := 1:MTTGPCNu DO
BEGIN
write "mttu", i,j, " = u(", i, ",", j+1, ");";
END;
END;
%write "%";
%write "% Set up the Y matrix";
%write "Y = zeros(", mtt_matrix_n, ",1);";
END;
SHUT "$1_obs.m2";
IF affine=1 THEN
BEGIN
GENTRANOUT "$1_obs.m3";
MTT_Matrix := MTTObs_o$
MTT_Matrix_name := "MTTO_o"$
MTT_Matrix_n := (MTTGPCNY+1)*MTTNy$
MTT_Matrix_m := 1$
matlab_Matrix()$
GENTRAN O_o := mtt_matrix;
MTT_Matrix := MTTObs_h$
MTT_Matrix_name := "MTTO_h"$
MTT_Matrix_n := (MTTGPCNy+1)*MTTNy$
MTT_Matrix_m := (MTTGPCNu+1)*MTTNu$
matlab_Matrix()$
GENTRAN O_h := mtt_matrix;
GENTRANSHUT "$1_obs.m3";
END
ELSE
BEGIN
GENTRANOUT "$1_obs.m3";
mtt_matrix := MTTYY$
mtt_matrix_n := MTTNY*(MTTGPCNy+1)$
mtt_matrix_m := 1$
mtt_matrix_name := Y$
matlab_matrix();
GENTRAN YY := mtt_matrix;
GENTRANSHUT "$1_obs.m3";
END;
EOF
if [ "$affine" = "1" ]; then
lang_header $1 obs m x [o_o,o_h] > $1_obs.m1
else
lang_header $1 obs m x,u yy > $1_obs.m1
fi
# Put together the pieces
matlab_tidy $1_obs.m3
cat $1_obs.m? >$1_obs.m
rm -f $1_obs.m?
|