I want to create a 4d matrix and interpolate. Dymola shows me this error for all interp values.
interpX1 (line 40, column 10: erstellte_Bauteile.QuadriLinearInterpolation)
Expected one of:
";"
","
"]"
")"
"}"
"constrainedby"
"annotation"
"if"
string-literal
operator
"for"
"loop"
"then"
"else"
":"
"("
"["
"."
interpX2 (line 41, column 10: erstellte_Bauteile.QuadriLinearInterpolation)
Expected one of:
";"
","
"]"
")"
"}"
"constrainedby"
"annotation"
"if"
string-literal
operator
"for"
"loop"
"then"
"else"
":"
"("
"["
"."
ERRORS have been issued.
I don't know how to solve the errors.
model CombinedInterpolationModel
model QuadriLinearInterpolation
parameter Real matrix[:,:,:,:]; // Die 4D-Matrix
parameter Integer X;
parameter Integer Y;
parameter Integer Z;
parameter Integer W;
Real x_in(start=0);
Real y_in(start=0);
Real z_in(start=0);
Real w_in(start=0);
output Real interpValue;
protected
Integer i;
Integer j;
Integer k;
Integer l;
Real wx;
Real wy;
Real wz;
Real ww;
algorithm
// Finde die nächstliegenden Indizes
i := floor(x_in);
j := floor(y_in);
k := floor(z_in);
l := floor(w_in);
// Berechne die Gewichtungsfaktoren
wx := x_in - i;
wy := y_in - j;
wz := z_in - k;
ww := w_in - l;
// Führe die lineare Interpolation in jeder Dimension durch
Real interpX1 = (1 - wx) * matrix[i, j, k, l] + wx * matrix[i+1, j, k, l];
Real interpX2 = (1 - wx) * matrix[i, j+1, k, l] + wx * matrix[i+1, j+1, k, l];
Real interpY1 = (1 - wy) * interpX1 + wy * interpX2;
Real interpX3 = (1 - wx) * matrix[i, j, k+1, l] + wx * matrix[i+1, j, k+1, l];
Real interpX4 = (1 - wx) * matrix[i, j+1, k+1, l] + wx * matrix[i+1, j+1, k+1, l];
Real interpY2 = (1 - wy) * interpX3 + wy * interpX4;
Real interpZ1 = (1 - wz) * interpY1 + wz * interpY2;
Real interpX5 = (1 - wx) * matrix[i, j, k, l+1] + wx * matrix[i+1, j, k, l+1];
Real interpX6 = (1 - wx) * matrix[i, j+1, k, l+1] + wx * matrix[i+1, j+1, k, l+1];
Real interpY3 = (1 - wy) * interpX5 + wy * interpX6;
Real interpX7 = (1 - wx) * matrix[i, j, k+1, l+1] + wx * matrix[i+1, j, k+1, l+1];
Real interpX8 = (1 - wx) * matrix[i, j+1, k+1, l+1] + wx * matrix[i+1, j+1, k+1, l+1];
Real interpY4 = (1 - wy) * interpX7 + wy * interpX8;
Real interpZ2 = (1 - wz) * interpY3 + wz * interpY4;
// Führe die finale Interpolation durch
interpValue := (1 - ww) * interpZ1 + ww * interpZ2;
end QuadriLinearInterpolation;
QuadriLinearInterpolation interpolation(
matrix = { 10,10,10,10/* Eingabe der Matrix */ },
X = 2,
Y = 2,
Z = 3,
W = 4);
Real x_in(start=0.5);
Real y_in(start=0.5);
Real z_in(start=1.5);
Real w_in(start=2.5);
Real interpolatedValue;
equation
// Benutze das Interpolation model
x_in = 0.5; // input values
y_in = 0.5;
z_in = 1.5;
w_in = 2.5;
// Verwendung interpolation model
interpolatedValue = interpolation.interpValue;
end CombinedInterpolationModel;