This is where navigation should be.

FRSYNITER - Iterative synthesis

Usage

f=frsyniter(F,c);
f=frsyniter(F,c,Ls);
[f,relres,iter]=frsyniter(F,c,...);

Input parameters

F Frame
c Array of coefficients.
Ls length of signal.

Output parameters

f Signal.
relres Vector of residuals.
iter Number of iterations done.

Description

f=frsyniter(F,c) iteratively inverts the analysis operator of F, so frsyniter always performs the inverse operation of frana, even when a perfect reconstruction is not possible by using frsyn.

[f,relres,iter]=frsyniter(...) additionally returns the relative residuals in a vector relres and the number of iteration steps iter.

Note: If it is possible to explicitly calculate the canonical dual frame then this is usually a much faster method than invoking frsyniter.

frsyniter takes the following parameters at the end of the line of input arguments:

'tol',t Stop if relative residual error is less than the specified tolerance. Default is 1e-9 (1e-5 for single precision)
'maxit',n Do at most n iterations.
'cg' Solve the problem using the Conjugate Gradient algorithm. This is the default.
'pcg' Solve the problem using the Preconditioned Conjugate Gradient algorithm. Please note that preconditioning is not supported for all frame types.
'print' Display the progress.
'quiet' Don't print anything, this is the default.

Algorithms

The function uses the (Preconditioned) Conjugate Gradient algorithm to solve the following problem:

..   FF*f=Fc
\begin{equation*} FF* f = Fc \end{equation*}

The preconditioning alters the equations such that

\begin{equation*} M^{-1}FF* f = M^{-1}Fc \end{equation*}

Examples

The following example shows how to rectruct a signal without ever using the dual frame:

F=frame('dgtreal','gauss',10,20);
c=frana(F,bat);
[r,relres]=frsyniter(F,c,'tol',1e-14);
norm(bat-r)/norm(bat)
semilogy(relres);
title('Conversion rate of the CG algorithm');
xlabel('No. of iterations');
ylabel('Relative residual');