.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "gallery/0300_cvx/focuss_1.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note :ref:`Go to the end ` to download the full example code .. rst-class:: sphx-glr-example-title .. _sphx_glr_gallery_0300_cvx_focuss_1.py: .. _gallery:focuss:1: FOcal Underdetermined System Solver (FOCUSS) ================================================ .. contents:: :depth: 2 :local: This is a simple example of using the FOcal Underdetermined System Solver (FOCUSS). We can use the algorithm to solve a sparse recovery problem from compressive measurements. .. GENERATED FROM PYTHON SOURCE LINES 17-23 .. code-block:: default # Configure JAX for 64-bit computing from jax.config import config config.update("jax_enable_x64", True) .. GENERATED FROM PYTHON SOURCE LINES 24-25 Let's import necessary libraries .. GENERATED FROM PYTHON SOURCE LINES 25-37 .. code-block:: default import jax import jax.numpy as jnp import cr.nimble as crn import cr.sparse as crs import cr.sparse.pursuit.mp as mp import cr.sparse.data as crdata import cr.sparse.dict as crdict import cr.sparse.plots as crplot import cr.sparse.cvx.focuss as focuss .. GENERATED FROM PYTHON SOURCE LINES 38-40 Problem setup ---------------------------------------- .. GENERATED FROM PYTHON SOURCE LINES 40-48 .. code-block:: default # Number of compressive measurements m = 50 # Ambient dimension n = 100 # Number of non-zero entries in the sparse model k = 16 .. GENERATED FROM PYTHON SOURCE LINES 49-50 Gaussian sensing matrix .. GENERATED FROM PYTHON SOURCE LINES 50-52 .. code-block:: default Phi = crdict.gaussian_mtx(crn.KEYS[0], m, n) .. GENERATED FROM PYTHON SOURCE LINES 53-54 Spikes as sample data .. GENERATED FROM PYTHON SOURCE LINES 54-56 .. code-block:: default x0, omega = crdata.sparse_spikes(crn.KEYS[1], n, k) .. GENERATED FROM PYTHON SOURCE LINES 57-58 Compressive sensing/measurements .. GENERATED FROM PYTHON SOURCE LINES 58-60 .. code-block:: default y = Phi @ x0 .. GENERATED FROM PYTHON SOURCE LINES 61-63 FOCUSS with p=1 -------------------------- .. GENERATED FROM PYTHON SOURCE LINES 63-66 .. code-block:: default p = 1. iters = 6 .. GENERATED FROM PYTHON SOURCE LINES 67-68 FOCUSS step by step .. GENERATED FROM PYTHON SOURCE LINES 68-79 .. code-block:: default ax = crplot.h_plots(iters+2, height=1) ax[0].stem(x0, markerfmt='.') # Initial guess for solution x = jnp.ones(n) ax[1].stem(x, markerfmt='.') for i in range(iters): # Update solution [one step] x = focuss.step_noiseless(Phi, y, x, p=p) # Plot the updated solution ax[i+2].stem(x, markerfmt='.') .. image-sg:: /gallery/0300_cvx/images/sphx_glr_focuss_1_001.png :alt: focuss 1 :srcset: /gallery/0300_cvx/images/sphx_glr_focuss_1_001.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 80-81 FOCUSS method full .. GENERATED FROM PYTHON SOURCE LINES 81-86 .. code-block:: default sol = focuss.matrix_solve_noiseless(Phi, y, p=p, max_iters=10) print(sol) # solution vector x_hat = sol.x .. rst-class:: sphx-glr-script-out .. code-block:: none iterations=10 m=50, n=100, k=16 r_norm=6.892023e-15 x_norm=4.000000e+00 .. GENERATED FROM PYTHON SOURCE LINES 87-88 Metrics .. GENERATED FROM PYTHON SOURCE LINES 88-94 .. code-block:: default snr = crn.signal_noise_ratio(x, x_hat) prd = crn.percent_rms_diff(x, x_hat) n_rmse = crn.normalized_root_mse(x, x_hat) print(f'SNR: {snr:.2f} dB, PRD: {prd:.2f} %, N-RMSE: {n_rmse:.2e}') .. rst-class:: sphx-glr-script-out .. code-block:: none SNR: 272.70 dB, PRD: 0.00 %, N-RMSE: 2.32e-14 .. GENERATED FROM PYTHON SOURCE LINES 95-96 Plot the solution .. GENERATED FROM PYTHON SOURCE LINES 96-100 .. code-block:: default ax = crplot.h_plots(2, height=2) ax[0].stem(x0, markerfmt='.') ax[1].stem(x_hat, markerfmt='.') .. image-sg:: /gallery/0300_cvx/images/sphx_glr_focuss_1_002.png :alt: focuss 1 :srcset: /gallery/0300_cvx/images/sphx_glr_focuss_1_002.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out .. code-block:: none .. GENERATED FROM PYTHON SOURCE LINES 101-103 FOCUSS with p=0.5 -------------------------- .. GENERATED FROM PYTHON SOURCE LINES 103-106 .. code-block:: default p = 0.5 iters = 9 .. GENERATED FROM PYTHON SOURCE LINES 107-108 FOCUSS step by step .. GENERATED FROM PYTHON SOURCE LINES 108-117 .. code-block:: default ax = crplot.h_plots(iters+2, height=1) ax[0].stem(x0, markerfmt='.') # Initial guess for solution x = jnp.ones(n) ax[1].stem(x, markerfmt='.') for i in range(iters): x = focuss.step_noiseless(Phi, y, x, p=p) ax[i+2].stem(x, markerfmt='.') .. image-sg:: /gallery/0300_cvx/images/sphx_glr_focuss_1_003.png :alt: focuss 1 :srcset: /gallery/0300_cvx/images/sphx_glr_focuss_1_003.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 118-119 FOCUSS method full .. GENERATED FROM PYTHON SOURCE LINES 119-124 .. code-block:: default sol = focuss.matrix_solve_noiseless(Phi, y, p=p, max_iters=10) print(sol) # solution vector x_hat = sol.x .. rst-class:: sphx-glr-script-out .. code-block:: none iterations=10 m=50, n=100, k=16 r_norm=2.088181e-15 x_norm=3.981269e+00 .. GENERATED FROM PYTHON SOURCE LINES 125-126 Metrics .. GENERATED FROM PYTHON SOURCE LINES 126-132 .. code-block:: default snr = crn.signal_noise_ratio(x, x_hat) prd = crn.percent_rms_diff(x, x_hat) n_rmse = crn.normalized_root_mse(x, x_hat) print(f'SNR: {snr:.2f} dB, PRD: {prd:.2f} %, N-RMSE: {n_rmse:.2e}') .. rst-class:: sphx-glr-script-out .. code-block:: none SNR: 43.89 dB, PRD: 0.64 %, N-RMSE: 6.39e-03 .. GENERATED FROM PYTHON SOURCE LINES 133-134 Plot the solution .. GENERATED FROM PYTHON SOURCE LINES 134-137 .. code-block:: default ax = crplot.h_plots(2, height=2) ax[0].stem(x0, markerfmt='.') ax[1].stem(sol.x, markerfmt='.') .. image-sg:: /gallery/0300_cvx/images/sphx_glr_focuss_1_004.png :alt: focuss 1 :srcset: /gallery/0300_cvx/images/sphx_glr_focuss_1_004.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out .. code-block:: none .. rst-class:: sphx-glr-timing **Total running time of the script:** (0 minutes 4.821 seconds) .. _sphx_glr_download_gallery_0300_cvx_focuss_1.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: focuss_1.py ` .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: focuss_1.ipynb ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_