Linear interpolation in two dimensions of a table.
The grid points and function values are stored in a matrix "table[i,j]",
where:
- the first column "table[2:,1]" contains the u[1] grid points,
- the first row "table[1,2:]" contains the u[2] grid points,
- the other rows and columns contain the data to be interpolated.
Example:
| | | |
| 1.0 | 2.0 | 3.0 | // u2
----*-------*-------*-------*
1.0 | 1.0 | 3.0 | 5.0 |
----*-------*-------*-------*
2.0 | 2.0 | 4.0 | 6.0 |
----*-------*-------*-------*
// u1
is defined as
table = [0.0, 1.0, 2.0, 3.0;
1.0, 1.0, 3.0, 5.0;
2.0, 2.0, 4.0, 6.0]
If, e.g. the input u is [1.0;1.0], the output y is 1.0,
e.g. the input u is [2.0;1.5], the output y is 3.0.
- The interpolation is efficient, because a search for a new interpolation
starts at the interval used in the last call.
- If the table has only one element, the table value is returned,
independent of the value of the input signal.
- If the input signal u1 or u2 is outside of the defined interval,
the corresponding value is also determined by linear
interpolation through the last or first two points of the table.
- The grid values (first column and first row) have to be strict
monotonically increasing.
The table matrix can be defined in the following ways:
- Explicitly supplied as parameter matrix "table",
and the other parameters have the following values:
tableName is "NoName" or has only blanks,
fileName is "NoName" or has only blanks.
- Read from a file "fileName" where the matrix is stored as
"tableName". Both ASCII and binary file format is possible.
(the ASCII format is described below).
It is most convenient to generate the binary file from Matlab
(Matlab 4 storage format), e.g., by command
save tables.mat tab1 tab2 tab3 -V4
when the three tables tab1, tab2, tab3 should be
used from the model.
- Statically stored in function "usertab" in file "usertab.c".
The matrix is identified by "tableName". Parameter
fileName = "NoName" or has only blanks.
Table definition methods (1) and (3) do not allocate dynamic memory,
and do not access files, whereas method (2) does. Therefore (1) and (3)
are suited for hardware-in-the-loop simulation (e.g. with dSpace hardware).
When the constant "NO_FILE" is defined, all parts of the
source code of method (2) are removed by the C-preprocessor, such that
no dynamic memory allocation and no access to files takes place.
If tables are read from an ASCII-file, the file need to have the
following structure ("-----" is not part of the file content):
-----------------------------------------------------
#1
double table2D_1(3,4) # comment line
0.0 1.0 2.0 3.0 # u[2] grid points
1.0 1.0 3.0 5.0
2.0 2.0 4.0 6.0
double table2D_2(4,4) # comment line
0.0 1.0 2.0 3.0 # u[2] grid points
1.0 1.0 3.0 5.0
2.0 2.0 4.0 6.0
3.0 3.0 5.0 7.0
-----------------------------------------------------
Note, that the first two characters in the file need to be
"#1". Afterwards, the corresponding matrix has to be declared
with type, name and actual dimensions. Finally, in successive
rows of the file, the elements of the matrix have to be given.
Several matrices may be defined one after another.
The matrix elements are interpreted in exactly the same way
as if the matrix is given as a parameter. For example, the first
column "table2D_1[2:,1]" contains the u[1] grid points,
and the first row "table2D_1[1,2:]" contains the u[2] grid points.