J'ai un petit souci dans un MEX ou je remplis une matrice creuse. Voici le code, en C
Code c : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 double *mxRES = NULL ; // sortie Matlab mwIndex *ir = NULL ; mwIndex *jc = NULL ; mwIndex entry_counter = 0 ; // position dans la matrice [...] // creation d'une matrice creuse lmax x kmax plhs[0] = mxCreateSparse(lmax,kmax,Nelts, mxREAL) ; mxRES = mxGetPr(plhs[0]) ; ir = mxGetIr(plhs[0]) ; jc = mxGetJc(plhs[0]) ; for (k=0 ; k<kmax ; k++){ jc[(mwIndex)(k)] = entry_counter ; // position du 1er élément de la colonne k for (l = 0 ; l<lmax; l++){ j = some_function( l,k ) ; // 'some_function' est une fonction qui renvoit un entier entre 0 et lmax-1, de telle sorte que j reste dans le bon intervalle mxRES[entry_counter] = f(l) ; // valeur qui depend de l ir[entry_counter] = (mwIndex)(j) ; // position dans la matrice du j-eme element de la colonne k. entry_counter++ ; } } jc[ (mwIndex)(kmax) ] = entry_counter ;
Mon problème est que la fonction 'some_function' n'est pas croissante : pour un k donnée, il se peut que j = some_function( l,k ) soit plus petit que j' = some_function( l-1,k ). Du coup la matrice H (sur laquelle pointe prhs[0], la sortie) a des propriété étrange, comme [H'*H]' =/= H'*H
Je ne peux pas rendre 'some_function' croissante.
Est-il possible de remplir la matrice dans un ordre de ligne non croissant ?
Merci beaucoup
PS j'ai posté le même message sur Mathwork
EDIT - je crois que ma question est mal formulée. Reformulation : si, à k fixé (indice de colonne), les indices de lignes j ne sont pas croissants, est-il quand même possible de remplir une matrice creuse (avec une autre fonction peut-être...) ?
EDIT2 - correction dans le code :
Code c : Sélectionner tout - Visualiser dans une fenêtre à part mxRES[entry_counter] = f(l) ; // valeur qui depend de l
Partager