Mentions légales du service

Skip to content
Snippets Groups Projects
Commit 83a12924 authored by hhakim's avatar hhakim
Browse files

Modify order argument of eigtj to be 'ascend', 'descend' or 'undef'

parent f3a54328
Branches
Tags
No related merge requests found
......@@ -22,7 +22,7 @@
%> @param 'relerr', true (optional) For a stopping criterion based on the relative squared error (this is the default error).
%> @param 'relerr', false (optional) For a stopping criterion based on the absolute squared error.
%> @param 'verbosity', integer (optional) the level of verbosity, the greater the value the more info. is displayed.
%> @param 'order', integer (optional) -1 for a descending order of eigenvalues, 1 for an ascending order.
%> @param 'order', char (optional) 'descend' for a descending order of eigenvalues, 'ascend' for an ascending order (default value) or 'undef' for no sort.
%>
%> @retval [V,D]
%> - V the Faust object representing the approximate eigenvector transform. The column V(:, i) is the eigenvector corresponding to the eigenvalue D(i,i).
......
......@@ -77,13 +77,20 @@ function [FGFT,D] = fgft_givens(Lap, maxiter, varargin)
nGivens_per_fac = max(1, nGivens_per_fac);
end
case 'order'
if(argc == i || ~ isscalar(varargin{i+1}) || ~ isnumeric(varargin{i+1}))
error('order must be followed by an integer.')
if(argc == i || (~ strcmp(varargin{i+1}, 'ascend') && ~ strcmp(varargin{i+1}, 'descend') && ~ strcmp(varargin{i+1}, 'undef')))
error('order must be followed by a char array among ''ascend'', ''descend'' or ''undef''.')
else
order = varargin{i+1};
if(order(1) == 'a')
order = 1
elseif(order(1) == 'd')
order = -1
else
order = 0
end
end
otherwise
if(isstr(varargin{i}))
if(isstr(varargin{i}) && (~ strcmp(varargin{i}, 'ascend') && ~ strcmp(varargin{i}, 'descend') && ~ strcmp(varargin{i}, 'undef')) )
error([ varargin{i} ' unrecognized argument'])
end
end
......
......@@ -83,7 +83,7 @@ def svdtj(M, maxiter, tol=0, relerr=True, nGivens_per_fac=None, verbosity=0):
return U,S,V
def eigtj(M, maxiter, tol=0, relerr=True, nGivens_per_fac=None, verbosity=0,
order=1):
order='ascend'):
"""
Runs the truncated Jacobi algorithm to compute the eigenvalues of M (returned in W) and the corresponding transform of eigenvectors (in Faust V columns).
......@@ -106,8 +106,8 @@ def eigtj(M, maxiter, tol=0, relerr=True, nGivens_per_fac=None, verbosity=0,
nGivens_per_fac == None).
verbosity: (int) the level of verbosity, the greater the value the more info.
is displayed.
order: (int) default to 1 to sort eigenvalues in ascending order
order, 1 for a descending order.
order: (int) order of eigenvalues, default to 'ascend', other values
are 'descend' or 'undef'.
Returns:
......@@ -151,7 +151,7 @@ def eigtj(M, maxiter, tol=0, relerr=True, nGivens_per_fac=None, verbosity=0,
order)
def fgft_givens(Lap, maxiter, tol=0.0, relerr=True, nGivens_per_fac=None,
verbosity=0, order=1):
verbosity=0, order='ascend'):
"""
Computes the FGFT of the Laplacian matrix Lap (using fact.eigtj).
......
......@@ -1351,7 +1351,7 @@ cdef class FaustFact:
@staticmethod
def fact_givens_fgft_sparse(Lap, J, t, verbosity=0, stoppingError = 0.0,
errIsRel=True, order=1):
errIsRel=True, order='ascend'):
from scipy.sparse import spdiags
cdef double [:] data1d #only for csr mat factor
cdef int [:] indices # only for csr mat
......@@ -1360,6 +1360,10 @@ cdef class FaustFact:
cdef unsigned int Lap_num_cols=Lap.shape[1]
cdef double[:] D_view
if(order == 'ascend'): order = 1
elif(order == 'descend'): order = -1
elif(order == 'undef'): order = 0
data1d=Lap.data.astype(float,'F')
indices=Lap.indices.astype(np.int32, 'F')
indptr=Lap.indptr.astype(np.int32, 'F')
......@@ -1395,6 +1399,12 @@ cdef class FaustFact:
# double == float64
check_matrix(isReal, Lap)
if(order == 'ascend'): order = 1
elif(order == 'descend'): order = -1
elif(order == 'undef'): order = 0
else: raise ValueError('order argument must be something among'
'\'ascend\', \'descend\' or \'undef\'')
if(not isReal):
raise TypeError('Matrix must be a real.')
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment