Turn on suggestions

Auto-suggest helps you quickly narrow down your search results by suggesting possible matches as you type.

Showing results for

- Intel Community
- Software
- Software Development SDKs and Libraries
- Intel® oneAPI Math Kernel Library
- updating a QR decomposition

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Mute
- Printer Friendly Page

Azua_Garcia__Giovann

Beginner

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

03-18-2012
02:02 PM

148 Views

updating a QR decomposition

I currently use the function LAPACKE_dgeqrf to compute the full QR decomposition of a matrix A, and this is done as part of an iterative algorithm that keeps appending new rows to A in every iteration.

Is there a function (or combination of functions) in MKL that will allow me to update the previously computed QR factorization whenever I update A with a new row rather than building QR it from scratch each time?

I could not figure out from the manual what the right function would be ...

Many thanks in advance,

Best regards,

Giovanni

Link Copied

2 Replies

Victor_K_Intel1

Employee

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

03-22-2012
12:51 AM

148 Views

I try to guess what you need and below is my understanding.

So, you do

A=Q*R

A1=(R )

(a1)

A1=Q1*R2

A2=(R2)

(a2)

A2=Q2*R3

...

At each step the matrix is appened from below with one additional line. Applying QR factorization we get a new upper triangular matrix and repeat the process again and again.

I guess you are looking for the function to make a QR factorization of matrices that appear at each step - upper triangular matrices appended from below with one additional row, right?

Unfortunately, there is no special functionality in MKL LAPACK to solve this task.

However, you canwrite the code based on rotations (combination of DROTMG and DROTM) that will get you the result. The idea is simple - elements of the last row should be anihilated one after each other.First, the element in the first column should be zeroed by applying rotations to the first row and the last row. Second, the element in the second column to be zeroed by applying rotation to the second and the last row, and so on.

I'm affraid the code won't be very fast, though.

WBR

Victor

Azua_Garcia__Giovann

Beginner

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

03-27-2012
03:55 AM

148 Views

Yes indeed that's what I need to do. The algorithm for this same idea is described in the paper below, section 2.3.1:

http://eprints.ma.man.ac.uk/1192/01/covered/MIMS_ep2008_111.pdf

It will definitely beat recomputing the full QR from scratch each time which is what I am doing now. Do you know of any third party implementation of this algorithm "Add one row" using givens rotations in C or Fortran?

Many thanks in advance,

Best regards,

Giovanni

Topic Options

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page

For more complete information about compiler optimizations, see our Optimization Notice.