Linear least squares, condition number

Join the discussion
Registration is free. Ask a follow-up in this thread, or start your own.
2 replies · 5K views
azay
Messages
18
Reaction score
0
Hi,

I am trying to learn some numerical algebra. Now I don't understand the following.

I'm finding the solution to the Linear Least Squares problem [tex]min||A\lambda-y||_{2}[/tex], which turns out to be (1,1). I did this by doing a QR factorization using Givens rotations.

with:

[itex] A=<br /> \[ \left( \begin{array}{ccc}<br /> 1 & 1\\<br /> 1 & 1.0001\\<br /> 1 & 1.0001\end{array} \right)\][/itex]
and
[itex] y=<br /> \[ \left( \begin{array}{ccc}<br /> 2\\<br /> 0.0001\\<br /> 4.0001\end{array} \right)\][/itex]

Now, I have a Octave (matlab clone) program that does the same calculation. As the condition number of the matrix A is very large (4.2429e+004) (found by applying Octave's cond() function on A), I expect the solution to be at least not exact. Yet the Octave program gives the exact solution (1,1), at least, as far as I can see (6 digit accuracy I think), that is. Can someone explain this?

Also, should one consider the condition number of the matrix A when considering the condition of the Linear Least Squares problem, or the condition number of the Matrix A|y?
(The condition number of the latter is even bigger so my first question holds in any case).

Thank you :)
 
Physics news on Phys.org
The condition numbers don't tell you that something is definitely not accurate. They tell you what at least can be expected. There are a couple of possible reasons: the input is sufficiently precise for the data memory and algorithmic steps used, the algorithms are identical, or just by chance.
 
Matlab computes with internal numerical precision of approximately 1 part in 10^15 or 10^16, I forget which (unless you set it for greater precision). It therefore easily inverts a matrix of condition number 10^4. (In fact, it should work with condition numbers nearing 10^15.) Presumably Octave is similar.
 
  • Like
Likes   Reactions: FactChecker