Не удалось решить линейную систему уравнений - PullRequest
2 голосов
/ 05 июня 2019

Я пытаюсь решить код

model modelTest

// types
  type Mass = Real (unit = "Kg", min = 0);
  type Length = Real (unit = "m");
  type Area = Real (unit = "m2", min = 0);
  type Force = Real (unit = "Kg.m/s2");
  type Pressure = Real (unit = "Kg/m/s2");
  type Torque = Real (unit = "Kg.m2/s2");
  type Velocity = Real (unit = "m/s");
  type Time = Real (unit = "s");

// constants
  constant Real pi = 2 * Modelica.Math.asin(1.0);
  parameter Mass Mp = 0.01;
  parameter Length r1 = 0.010;
  parameter Integer n = 3;
  parameter Area A = 0.020 * 0.015;
  parameter Time Stepping = 0.1;
  parameter Real DutyCycle = 0.5;
  parameter Pressure Pin = 5000;
  parameter Real Js = 1;

// variables
  Length x[n];
  Velocity vx[n];
  Real theta;
  Real vt;
  Pressure P[n]; 

initial equation
  theta = 0;
  vt = 0;

algorithm
  for i in 1:n loop
    if noEvent((i - 1) * Stepping < mod(time, Stepping)) and noEvent(mod(time, Stepping) < (i - 1) * Stepping + Stepping * DutyCycle) then
      P[i] := Pin;
    else
      P[i] := 0;
    end if;
  end for;

equation
  vx = der(x);
  vt = der(theta);
  x = r1 * {sin(theta + (i -1) * 2 * pi / n) for i in 1:n};
  Js * der(theta) = r1 * sum((Mp * der(vx) + P * A) .* {cos(theta + (i -1) * 2 * pi / n) for i in 1:n});

annotation(
    experiment(StartTime = 0, StopTime = 10, Tolerance = 1e-6, Interval = 0.01),
    __OpenModelica_simulationFlags(lv = "LOG_STATS", outputFormat = "mat", s = "dassl"));
end modelTest;

, но решатель так и не завершает показ ошибки:

Не удалось решить линейную систему уравнений (№ 51)в момент времени ... Остаточная норма равна ...

Сбой линейного решателя по умолчанию, запасной решатель с полным поворотом за раз ..., который может вызвать скачок plv LOG_LS.

IБуду признателен, если вы поможете мне узнать, в чем проблема и как я могу ее решить.Спасибо за вашу поддержку заранее.

PS1. Я обнаружил эту похожую проблему 15 месяцев назад.

PS2. В коде было несколько ошибок.Модифицированную версию можно найти здесь .

...