- Index
- » Developer
- » OpenModelica development
- » Bug in linearize() function with...

## Bug in linearize() function with symbolic linearization.

### Bug in linearize() function with symbolic linearization.

Dear all,

Symbolic linearization is not working. Numerical linearization works as expected, but the symbolic one yields an incorrect result.

The system I'm using for testing is a simple harmonic oscillator. The equation of motion is

x'' + w0^2 * ( x - gnd ) = 0, with resonant frequency w0 = 2 rad/s.

The state space representation is easily calculated by defining the variables q1 =x and q2=x'. The state space vector and matrices are

q = [ q1 ]

[ q2 ] ,

A = [ 0 , 1 ]

[-4 , 0 ] ,

B = [ 0 ]

[ 4 ] ,

C = [ 1 , 0 ] ,

D = 0.

with

Input: gnd, position of the ground

Output: q1 = x, position of mass.

The symbolic method yield the correct values for A and B, but not for C. Namely, it yields

C = [ 0 , 1 ].

In more elaborate examples, it can be seen that the value for D is also wrong, but not in this simple one.

I'm using Windows 10, OpenModelica v1.18.1 (64-bit) and OMShell.

I guess there is still a chance I'm misunderstanding the usage of the symbolic linearization, but this seems to be a bug. Is the correct forum to post this, is GitHub more appropriate?

Any help in solving this will be appreciated.

Regards,

Fabian

Numeric linearization:

#### Code:

loadFile("HarmonicOscillator.mo")

clearCommandLineOptions()

linearize(HarmonicOscillator)

readFile("linearized_model.mo")

Symbolic linearization

#### Code:

loadFile("HarmonicOscillator.mo")

setCommandLineOptions({"+generateSymbolicLinearization"})

linearize(HarmonicOscillator)

readFile("linearized_model.mo")

Model

#### Code:

model HarmonicOscillator

input Real gnd = 0.03 "Position of the ground" ;

Real q2 "Velocity of the test mass" ;

constant Real w0 = 2 "Resonance frequency" ;

output Real q1 "Position of the test mass" ;

initial equation

q1 = 0.03 "Initial position of test mass" ;

q2 = 0.0 "Initial velocity of test mass" ;

equation

der( q1 ) = q2 ;

der( q2 ) = - w0 * w0 * (q1 - gnd) ;

end HarmonicOscillator ;

- Index
- » Developer
- » OpenModelica development
- » Bug in linearize() function with...