Community
cancel
Showing results for 
Search instead for 
Did you mean: 
lkeene
Beginner
69 Views

How to use IPP SVD function?

Hello,

I'm trying to use "ippsSVD_64f_D2(...)" function. Among the argument list is one parameter named "int nIter" which is described in the documentation as "Number of iterations for diagonalization". On what basis do I select a value for this? My input data arrays are always 3x3, if this matters.

Thanks you.
-L
0 Kudos
1 Reply
Ying_H_Intel
Employee
69 Views

Quoting - lkeene
Hello,

I'm trying to use "ippsSVD_64f_D2(...)" function. Among the argument list is one parameter named "int nIter" which is described in the documentation as "Number of iterations for diagonalization". On what basis do I select a value for this? My input data arrays are always 3x3, if this matters.

Thanks you.
-L

Hello,

SVDalgorithm second step (namely diagonalization) is by-nature iterative with a number of iterations to converge mathematically known as O(M) for matrix [MxN]. So, none certain number may guaranty convergence. The only fact is that it will converge for some finite number of iterations.

Actually, mathematical number of iteration depends on input data only. So, nIter can be considered as safe guard to stop calculation in case SVD converges too long.

agood way would be to start with nIter=N*M (for example, in your casenIter=9)then double until SVD converge (untill the function returns ippStsNoErr, the function returns ippStsSVDCnvgErr indicates an error when the SVD algorithm has not converged after nIter iterations)

Regards,
YingH.