f=frsyniter(F,c); f=frsyniter(F,c,Ls); [f,relres,iter]=frsyniter(F,c,...);
F | Frame |
c | Array of coefficients. |
Ls | length of signal. |
f | Signal. |
relres | Vector of residuals. |
iter | Number of iterations done. |
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. |
The function uses the (Preconditioned) Conjugate Gradient algorithm to solve the following problem:
.. FF*f=Fc
The preconditioning alters the equations such that
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');