WOLFRAM SYSTEM MODELER

# QR

Return the QR decomposition of a square matrix with optional column pivoting (A(:,p) = Q*R) # Wolfram Language

In:= `SystemModel["Modelica.Math.Matrices.QR"]`
Out:= # Information

This information is part of the Modelica Standard Library maintained by the Modelica Association.

#### Syntax

```(Q,R,p) = Matrices.QR(A);
```

#### Description

This function returns the QR decomposition of a rectangular matrix A (the number of columns of A must be less than or equal to the number of rows):

Q*R = A[:,p]

where Q is a rectangular matrix that has orthonormal columns and has the same size as A (QTQ=I), R is a square, upper triangular matrix and p is a permutation vector. Matrix R has the following important properties:

• The absolute value of a diagonal element of R is the largest value in this row, i.e., abs(R[i,i]) ≥ abs(R[i,j]).
• The diagonal elements of R are sorted according to size, such that the largest absolute value is abs(R[1,1]) and abs(R[i,i]) ≥ abs(R[j,j]) with i < j.

This means that if abs(R[i,i]) ≤ ε then abs(R[j,k]) ≤ ε for j ≥ i, i.e., the i-th row up to the last row of R have small elements and can be treated as being zero. This allows to, e.g., estimate the row-rank of R (which is the same row-rank as A). Furthermore, R can be partitioned in two parts

```   A[:,p] = Q * [R1, R2;
0,  0]
```

where R1 is a regular, upper triangular matrix.

Note, the solution is computed with the LAPACK functions "dgeqpf" and "dorgqr", i.e., by Householder transformations with column pivoting. If Q is not needed, the function may be called as: `(,R,p) = QR(A)`.

#### Example

```  Real A[3,3] = [1,2,3;
3,4,5;
2,1,4];
Real R[3,3];
algorithm
(,R) := Matrices.QR(A);  // R = [-7.07.., -4.24.., -3.67..;
0     , -1.73.., -0.23..;
0     ,  0     ,  0.65..];
```

# Syntax

(Q, R, p) = QR(A, pivoting)

# Inputs (2)

A Type: Real[:,:] Description: Rectangular matrix with size(A,1) >= size(A,2) Default Value: true Type: Boolean Description: True if column pivoting is performed. True is default

# Outputs (3)

Q Type: Real[size(A, 1),size(A, 2)] Description: Rectangular matrix with orthonormal columns such that Q*R=A[:,p] Type: Real[size(A, 2),size(A, 2)] Description: Square upper triangular matrix Type: Integer[size(A, 2)] Description: Column permutation vector