Suppose initial data is $D$ and need to calculate the inverse of covariance of matrix $D$ i.e. $C = cov(D,D)$, where $cov$ represents covariance.

$B = inv(C)$

Now, new data $N$ appears. So matrix D and C both will updated as follows:

$D^{new} = \begin{bmatrix} D\\ N \end{bmatrix}$

$C^{new} = \begin{bmatrix} cov(D,D) & cov(D,D^{new})\\ cov(D^{new},D) & cov(D^{new},D^{new}) \end{bmatrix} = \begin{bmatrix} C & cov(D,D^{new})\\ cov(D,D^{new})^T & cov(D^{new},D^{new}) \end{bmatrix}$

Similarly, data will be updated continuously. Now, inverse of $C$ (i.e. $B$) is given and need to calculate inverse of $B^{new}$. However, I don't want to use direct or general inverse as it will be very expensive if matrix size will be large and also want to utilize the inverse calculated for old data i.e. $B$.

P.S: I have tried inverse of block or partitioned matrix but it doesn't yield similar result as general inverse in all cases ( For more detail: https://math.stackexchange.com/questions/2341605/why-i-am-getting-difference-between-block-inverse-and-general-inverse ). If someone needs then I can provide the MATLAB code to verify it.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.