.Modelica_LinearSystems2.UsersGuide.GettingStarted.ComplexNumbers

Information

Complex numbers are defined via record Modelica_LinearSystems2.Math.Complex. Basically, the record consists of the real and imaginary part of a complex number and functions stored in the record that operate on Complex numbers. A screenshot of the record and its content is given in the next figure:

Switch to an interactive Modelica environment (e.g., Dymola command window) and type in the following commands:

import Modelica_LinearSystems2.Math.Complex;

This import statement defines a convenient abbreviation, so that in the following, we have only to type "Complex" and no longer "Modelica_LinearSystems2.Complex".
Since the Modelica language has been extended to support the concept of operator overloading, the definition of record Complex allows to write the following commands:

import Modelica_LinearSystems2.Math.Complex;

j  = Complex.j();
c1 = 1 + 3*j;
c2 = 1 - 5*j;
c3 = c1 + c2;

The original generation of complex numbers by using the record-constructor and calling operation functions is still possible and described at Functions and operators

The overloading concept also includes the build in function 'String', i.e. typing

import Modelica_LinearSystems2.Math.Complex;

j  = Complex.j();
c1 = 1 + 3*j;
Modelica.Utilities.Streams.print("c1 = "+String(c1));

results in

c1 = 1 + 3j

Besides the basic operations, the most important specific functions for Complex numbers are also available, e.g., exp(), sin() or conj() to compute

exp(z)  = exp(Re(z)*(cos(Im(z)) + j sin(Im(z)))
sin(z)  = 1/(2j)*(exp(zj) - exp(-zj))
conj(z) = Re(z) - jIm(z)

respectively.

Function arg() returns the phase angle of the Complex number. The phase angle is not unique. Via the optional second argument phi0, the desired range can be defined, such that

-pi < arg(c,phi0) - phi0 < pi.

For example:

Complex.arg( 1+j*0.5, 4*pi );  // = 4*pi+pi/4 = 13.351...

Note that the operators 'abs'(), 'sqrt'(), and 'max'() in this version of Modelica_LinearSystems2 are not supported by the overloading operator concept yet. Therefore, the original way of function calling, e.g.

a = Complex.'abs'(3 + j*4)

has to be applied.

Contents

NameDescription
FunctionsAndOperatorsFunctions and operators

Generated at 2024-04-18T18:15:58Z by OpenModelicaOpenModelica 1.22.3 using GenerateDoc.mos