这个模型有什么问题? 4D 矩阵插值

问题描述 投票:0回答:1

interpX1(第 40 行,第 10 列:erstellte_Bauteile.QuadriLinearInterpolation)

预期其中之一: “;” “,” “]” “)” “}” “受约束” “注解” “如果” 字符串字面量 操作员 “为了” “环形” “然后” “别的” “:” “(” “[” “。”

interpX2(第 41 行,第 10 列:erstellte_Bauteile.QuadriLinearInterpolation)

预期其中之一: “;” “,” “]” “)” “}” “受约束” “注解” “如果” 字符串字面量 操作员 “为了” “环形” “然后” “别的” “:” “(” “[” “。”

interpY1(第 42 行,第 10 列:erstellte_Bauteile.QuadriLinearInterpolation)

预期其中之一: “;” “,” “]” “)” “}” “受约束” “注解” “如果” 字符串字面量 操作员 “为了” “环形” “然后” “别的” “:” “(” “[” “。”

interpX3(第 44 行,第 10 列:erstellte_Bauteile.QuadriLinearInterpolation)

预期其中之一: “;” “,” “]” “)” “}” “受约束” “注解” “如果” 字符串字面量 操作员 “为了” “环形” “然后” “别的” “:” “(” “[” “。”

interpX4(第 45 行,第 10 列:erstellte_Bauteile.QuadriLinearInterpolation)

预期其中之一: “;” “,” “]” “)” “}” “受约束” “注解” “如果” 字符串字面量 操作员 “为了” “环形” “然后” “别的” “:” “(” “[” “。”

interpY2(第 46 行,第 10 列:erstellte_Bauteile.QuadriLinearInterpolation)

预期其中之一: “;” “,” “]” “)” “}” “受约束” “注解” “如果” 字符串字面量 操作员 “为了” “环形” “然后” “别的” “:” “(” “[” “。”

interpZ1(第 48 行,第 10 列:erstellte_Bauteile.QuadriLinearInterpolation)

预期其中之一: “;” “,” “]” “)” “}” “受约束” “注解” “如果” 字符串字面量 操作员 “为了” “环形” “然后” “别的” “:” “(” “[” “。”

interpX5(第 50 行,第 10 列:erstellte_Bauteile.QuadriLinearInterpolation)

预期其中之一: “;” “,” “]” “)” “}” “受约束” “注解” “如果” 字符串字面量 操作员 “为了” “环形” “然后” “别的” “:” “(” “[” “。”

interpX6(第 51 行,第 10 列:erstellte_Bauteile.QuadriLinearInterpolation)

预期其中之一: “;” “,” “]” “)” “}” “受约束” “注解” “如果” 字符串字面量 操作员 “为了” “环形” “然后” “别的” “:” “(” “[” “。”

interpY3(第 52 行,第 10 列:erstellte_Bauteile.QuadriLinearInterpolation)

预期其中之一: “;” “,” “]” “)” “}” “受约束” “注解” “如果” 字符串字面量 操作员 “为了” “环形” “然后” “别的” “:” “(” “[” “。”

interpX7(第 54 行,第 10 列:erstellte_Bauteile.QuadriLinearInterpolation)

预期其中之一: “;” “,” “]” “)” “}” “受约束” “注解” “如果” 字符串字面量 操作员 “为了” “环形” “然后” “别的” “:” “(” “[” “。”

interpX8(第 55 行,第 10 列:erstellte_Bauteile.QuadriLinearInterpolation)

预期其中之一: “;” “,” “]” “)” “}” “受约束” “注解” “如果” 字符串字面量 操作员 “为了” “环形” “然后” “别的” “:” “(” “[” “。”

interpY4(第 56 行,第 10 列:erstellte_Bauteile.QuadriLinearInterpolation)

预期其中之一: “;” “,” “]” “)” “}” “受约束” “注解” “如果” 字符串字面量 操作员 “为了” “环形” “然后” “别的” “:” “(” “[” “。”

interpZ2(第 58 行,第 10 列:erstellte_Bauteile.QuadriLinearInterpolation)

预期其中之一: “;” “,” “]” “)” “}” “受约束” “注解” “如果” 字符串字面量 操作员 “为了” “环形” “然后” “别的” “:” “(” “[” “。”

插值(第 64 行,第 29 列:erstellte_Bauteile.QuadriLinearInterpolation)

预期其中之一: “;” “,” “]” “)” “}” “受约束” “注解” “如果” 字符串字面量 操作员 “为了” “环形” “然后” “别的” “:” “(” “[” “。”

x_in(第 71 行,第 8 列:erstellte_Bauteile.QuadriLinearInterpolation)

预期其中之一: “;” “,” “]” “)” “}” “受约束” “注解” “如果” 字符串字面量 操作员 “为了” “环形” “然后” “别的” “:” “(” “[” “。”

y_in(第 72 行,第 8 列:erstellte_Bauteile.QuadriLinearInterpolation)

预期其中之一: “;” “,” “]” “)” “}” “受约束” “注解” “如果” 字符串字面量 操作员 “为了” “环形” “然后” “别的” “:” “(” “[” “。”

z_in(第 73 行,第 8 列:erstellte_Bauteile.QuadriLinearInterpolation)

预期其中之一: “;” “,” “]” “)” “}” “受约束” “注解” “如果” 字符串字面量 操作员 “为了” “环形” “然后” “别的” “:” “(” “[” “。”

w_in(第 74 行,第 8 列:erstellte_Bauteile.QuadriLinearInterpolation)

预期其中之一: “;” “,” “]” “)” “}” “受约束” “注解” “如果” 字符串字面量 操作员 “为了” “环形” “然后” “别的” “:” “(” “[” “。”

interpolatedValue(第 76 行,第 8 列:erstellte_Bauteile.QuadriLinearInterpolation)

预期其中之一: “;” “,” “]” “)” “}” “受约束” “注解” “如果” 字符串字面量 操作员 “为了” “环形” “然后” “别的” “:” “(” “[” “。”

已发布错误。

我不知道如何解决这些错误。

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;

interpolation modelica openmodelica dymola
1个回答
0
投票

不能在算法部分声明变量。我将声明移至受保护的部分。请注意,虽然可以解析模型,但除非您为其提供适当的 4D 矩阵,否则它不会起作用,{10, 10, 10, 10} 只是一个 1 维向量。如果您希望这些成为矩阵的维度,那么您需要将它们设置为参数,并在定义插值分量时修改它们(例如,就像对 X 所做的那样)。或者直接使用

matrix = fill(0, 10, 10, 10, 10)

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;
    
    Real interpX1;
    Real interpX2;
    Real interpY1;
    Real interpX3;
    Real interpX4;
    Real interpY2;
    Real interpZ1;
    Real interpX5;
    Real interpX6;
    Real interpY3;
    Real interpX7;
    Real interpX8;
    Real interpY4;
    Real interpZ2;

  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
    interpX1 := (1 - wx) * matrix[i, j, k, l] + wx * matrix[i+1, j, k, l];
    interpX2 := (1 - wx) * matrix[i, j+1, k, l] + wx * matrix[i+1, j+1, k, l];
    interpY1 := (1 - wy) * interpX1 + wy * interpX2;

    interpX3 := (1 - wx) * matrix[i, j, k+1, l] + wx * matrix[i+1, j, k+1, l];
    interpX4 := (1 - wx) * matrix[i, j+1, k+1, l] + wx * matrix[i+1, j+1, k+1, l];
    interpY2 := (1 - wy) * interpX3 + wy * interpX4;

    interpZ1 := (1 - wz) * interpY1 + wz * interpY2;

    interpX5 := (1 - wx) * matrix[i, j, k, l+1] + wx * matrix[i+1, j, k, l+1];
    interpX6 := (1 - wx) * matrix[i, j+1, k, l+1] + wx * matrix[i+1, j+1, k, l+1];
    interpY3 := (1 - wy) * interpX5 + wy * interpX6;

    interpX7 := (1 - wx) * matrix[i, j, k+1, l+1] + wx * matrix[i+1, j, k+1, l+1];
    interpX8 := (1 - wx) * matrix[i, j+1, k+1, l+1] + wx * matrix[i+1, j+1, k+1, l+1];
    interpY4 := (1 - wy) * interpX7 + wy * interpX8;

    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;
© www.soinside.com 2019 - 2024. All rights reserved.