BerndGit
BerndGit

Reputation: 1660

How to limit solution domain in modelica

I have a very simple model in OpenModelica.

model doubleSolution
   Real x ;
equation
   x^2 -4 = 0;
end doubleSolution;

There are two mathematical solutions for this problem x={-2,+2}. The Openmodelica Solver will provide just one result. In this case +2.

What if I'm intested in the other solution?

Using proper start values e.g. Real x(Start=-7) might help as a workaround, but I'm not sure if this is always a robust solution. I'd prefer if I could directly limit the solution range e.g. by (x < 0). Are such bundary conditions possible?

Upvotes: 0

Views: 241

Answers (1)

AnHeuermann
AnHeuermann

Reputation: 848

As you already noticed using a start value is one option. If that is a robust solution depends on how good the start value is. For this example the Newton-Raphson method is used, which highly depends on a good start value.

You can use max and min to give a variable a range where it is valid. Check for example 4.8.1 Real Type of the Modelcia Language Specification to see what attributes type Real has.

Together with a good start value this should be robust enough and at least give you a warning if the x becomes bigger then 0.0.

model doubleSolution
   Real x(max=0, start=-7);
equation
   x^2 -4 = 0;
end doubleSolution;

Another option would be to add an assert to the equations:

assert(value >= min and value <= max , "Variable value out of limit");

For the min and max attribute this assert is added automatically.

Upvotes: 1

Related Questions