Equilibrate a matrix with a large condition number to improve the efficiency and stability of a linear system solution with the iterative solver `gmres`

.

Load the `west0479`

matrix, which is a real-valued 479-by-479 sparse matrix. Use `condest`

to calculate the estimated condition number of the matrix.

Try to solve the linear system $\mathrm{Ax}=\mathit{b}$ using `gmres`

with 450 iterations and a tolerance of `1e-11`

. Specify five outputs so that `gmres`

returns the residual norms of the solution at each iteration (using `~`

to suppress unneeded outputs). Plot the residual norms in a semilog plot. The plot shows that `gmres`

is not able to achieve a reasonable residual norm, and so the calculated solution for $\mathit{x}$ is not reliable.

Use `equilibrate`

to permute and rescale `A`

. Create a new matrix `B = R*P*A*C`

, which has a better condition number and diagonal entries of only 1 and -1.

Using the outputs returned by `equilibrate`

, you can reformulate the problem $\mathrm{Ax}=\mathit{b}$ into $\mathrm{By}=\mathit{d}$, where $\mathit{B}=\mathrm{RPAC}$ and $\mathit{d}=\mathrm{RPb}$. In this form you can recover the solution to the original system with $\mathit{x}=\mathrm{Cy}$.

Use `gmres`

to solve $\mathrm{By}=\mathit{d}$ for $\mathit{y}$, and then replot the residual norms at each iteration. The plot shows that equilibrating the matrix improves the stability of the problem, with `gmres`

converging to the desired tolerance of `1e-11`

in fewer than 200 iterations.

**Improve Solution with Preconditioner**

After you obtain the matrix `B`

, you can improve the stability of the problem even further by calculating a preconditioner for use with `gmres`

. The numerical properties of `B`

are better than those of the original matrix `A`

, so you should use the equilibrated matrix to calculate the preconditioner.

Calculate two different preconditioners with `ilu`

, and use these as inputs to `gmres`

to solve the problem again. Plot the residual norms at each iteration on the same plot as the equilibrated norms for comparison. The plot shows that calculating preconditioners with the equilibrated matrix greatly increases the stability of the problem, with `gmres`

achieving the desired tolerance in fewer than 30 iterations.