Main Content

fixed.qlessQRUpdate

Update QR factorization

Description

R = fixed.qlessQRUpdate(R, y) updates upper-triangular R with vector y.

This syntax is equivalent to

[~,R] = qr([R;y],0);

R = fixed.qlessQRUpdate(R, y, forgettingFactor) updates upper-triangular R with vector y and multiplies the result by the value specified by forgettingFactor.

This syntax is equivalent to

[~,R] = qr([R;y],0);
R(:) = forgettingFactor * R;

Examples

collapse all

This example shows how to update the upper-triangular factor of a matrix as new data streams in.

Define a matrix and compute the upper-triangular factor, R, using the fixed.qlessQR function.

rng('default');
m = 20;
n = 4;
A = randn(m,n)
A = 20×4

    0.5377    0.6715   -0.1022   -1.0891
    1.8339   -1.2075   -0.2414    0.0326
   -2.2588    0.7172    0.3192    0.5525
    0.8622    1.6302    0.3129    1.1006
    0.3188    0.4889   -0.8649    1.5442
   -1.3077    1.0347   -0.0301    0.0859
   -0.4336    0.7269   -0.1649   -1.4916
    0.3426   -0.3034    0.6277   -0.7423
    3.5784    0.2939    1.0933   -1.0616
    2.7694   -0.7873    1.1093    2.3505
      ⋮

R = fixed.qlessQR(A)
R = 4×4

    7.1017   -2.0103    1.1646    0.7999
         0    4.8784    0.5745   -0.3222
         0         0    3.1658   -0.4570
         0         0         0    4.4965

As new data arrives, for example new values from a sensor array, you can use the fixed.qlessQRUpdate function to update the upper-triangular factor with the new data.

y1 = [1,1,1,1];
R = fixed.qlessQRUpdate(R,y1)
R = 4×4

    7.1718   -1.8513    1.2927    0.9315
         0    5.0412    0.7646   -0.0904
         0         0    3.2332   -0.2584
         0         0         0    4.6074

y2 = [1,1,1,1];
R = fixed.qlessQRUpdate(R,y2)
R = 4×4

    7.2411   -1.6954    1.4184    1.0607
         0    5.1929    0.9371    0.1191
         0         0    3.2892   -0.0962
         0         0         0    4.6928

The result of updating the upper-triangular factor as new data arrives is equivalent to computing the upper-triangular factor with all of the data.

R = fixed.qlessQR([A;y1;y2])
R = 4×4

    7.2411   -1.6954    1.4184    1.0607
         0    5.1929    0.9371    0.1191
         0         0    3.2892   -0.0962
         0         0         0    4.6928

When you want to stream an indefinite number of rows continuously, such as reading values from a sensor array continuously, without accumulating the data without bound, specify a forgetting factor.

forgettingFactor = exp(-1/(2*m))
forgettingFactor = 0.9753
y3 = [1, 1, 1, 1];
R = fixed.qlessQRUpdate(R,y3,forgettingFactor)
R = 4×4

    7.1294   -1.5046    1.5038    1.1582
         0    5.2031    1.0676    0.3020
         0         0    3.2543    0.0379
         0         0         0    4.6431

Input Arguments

collapse all

Upper triangular input, specified as a matrix.

Data Types: single | double | fi
Complex Number Support: Yes

Measurement input, specified as a vector.

Data Types: single | double | fi
Complex Number Support: Yes

Forgetting factor, specified as a nonnegative scalar between 0 and 1. The forgetting factor determines how much weight past data is given. The forgettingFactor value is multiplied by R after each row of R is processed.

Data Types: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | fi

Output Arguments

collapse all

Updated upper-triangular factor, returned as a matrix.

Introduced in R2020b