Generating a random tridiagonal symmetric positive definite matrix

1.1k Views Asked by At

I am looking for a way to generate random tridiagonal symmetric positive definite matrices in Matlab. I need to be able to generate a matrix of specific size (any number between 1-101). Does anybody know how to do that?

2

There are 2 best solutions below

0
On BEST ANSWER

Some general insight. A tridiagonal symmetric matrix would look like $$\begin{bmatrix}\alpha_1 & \beta_1 \\ \beta_1 & \alpha_2 & \beta_2 \\ & \beta_2 & \alpha_3 & \beta_3 \\ && \beta_3 & \alpha_4 \end{bmatrix}.$$ Firstly, generate each $\beta_i$ as real. If you want the matrix to be positive definite, you have to ensure that $\alpha_i > |\beta_{i-1}| +|\beta_i|$ (diagonal row-dominance). Consider generating some numbers $\varepsilon_i$ as strictly positive, then $\alpha_i := |\beta_{i-1}| +|\beta_i| +\varepsilon_i$. The corner entries are easier than that: $\alpha_1 := |\beta_1| +\varepsilon_1$ and $\alpha_n := |\beta_{n-1}| +\varepsilon_n$.

3
On

Rough implementation based on Rócherz's anwser

function [A] = triPosDef(n)
 %The function generates a random tridiagonal symmetric 
 %positive definite n by n matrix;
 b = randn(1,n-1);
 a = [abs(b), 0] +[0, abs(b)] +abs(randn(1,n));
 A=diag(b,-1)+diag(b,1)+diag(a);
end