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');