functionextractRealZeros

Extract real and conjugate complex elements from a complex vector

Information

Syntax

                realZeros = Matrices.extractRealZeros(complexVector, numberOfRealRoots);
(realZeros, complexZeros) = Matrices.extractRealZeros(
                              complexVector,
                              numberOfRealRoots,
                              name="complexVector");

Description

This function extracts the real zeros from the Complex vector "complexVector". It is required that all elements of complexVector define either a real zero (complexVector[i].im=0) or a conjugate complex zero pair (complexVector[i].re == complexVector[i+1].re and complexVector[i].im == -complexVector[i+1].im). The second argument "numberOfRealZeros" is determined by a function call of Internal.numberOfRealZeros(). The optional input argument "name" is used as name of "complexVector" in error messages.

The function returns the real elements of complexVector in vector "realZeros" and the real and imaginary part of a conjugate complex zero pair in matrix "complexZeros[:]".

Example

  // c = {0; 1+2j; 1-2j; 2; -3; -1-j; -1+j};
  Integer n = numberOfRealZeros(c);
  Real realZeros[n];
  Real complexZeros[:] = fill(Complex(0), integer((size(c,1)-n)/2));
algorithm
  (realZeros, complexZeros) := extractRealZeros(c, n);
           -> realZeros    = {0, 2, (-3)};
              complexZeros = { 1+2j,
                              -1+j}

Inputs

TypeNameDefaultDescription
Complex[:]complexVectorZeros of a polynomial with real coefficients, e.g., eigen values of a real matrix
IntegernumberOfRealZerosNumber of real zeros of ComplexVector determined with function numberOfRealZeros
Stringname"complexVector"Name of complexVector to be used in error message

Outputs

TypeNameDefaultDescription
Real[numberOfRealZeros]realZerosReal zeros of complexVector
Complex[:]complexZerosfill(Complex(0), integer((size(complexVector, 1) - numberOfRealZeros)/2))Complex zeros without the corresponding conjugate complex pair element