[PD-cvs] externals/iem/iemmatrix/src mtx_pivot.c,1.1.1.1,1.2
IOhannes m zmölnig
zmoelnig at users.sourceforge.net
Wed Mar 30 14:07:34 CEST 2005
Update of /cvsroot/pure-data/externals/iem/iemmatrix/src
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5466
Modified Files:
mtx_pivot.c
Log Message:
fixed a bug with non-square matrices;
added an argument to pivotize to a minimum trace (instead of a maximum)
Index: mtx_pivot.c
===================================================================
RCS file: /cvsroot/pure-data/externals/iem/iemmatrix/src/mtx_pivot.c,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -d -r1.1.1.1 -r1.2
*** mtx_pivot.c 21 Mar 2005 14:33:31 -0000 1.1.1.1
--- mtx_pivot.c 30 Mar 2005 12:07:31 -0000 1.2
***************
*** 27,30 ****
--- 27,32 ----
t_outlet *pivo, *pre, *post;
+
+ t_int ascending;
} t_mtx_pivot;
***************
*** 42,48 ****
int pivot_row, pivot_col;
! if (argc<2){ post("mtx_pivot: crippled matrix"); return; }
! if ((col<1)||(row<1)) { post("mtx_pivot: invalid dimensions"); return; }
! if (col*row>argc-2){ post("sparse matrix not yet supported : use \"mtx_check\""); return; }
adjustsize(&x->m, row, col);
--- 44,61 ----
int pivot_row, pivot_col;
! int ascending=(x->ascending);
!
! if (argc<2){
! post("mtx_pivot: crippled matrix");
! return;
! }
! if ((col<1)||(row<1)){
! post("mtx_pivot: invalid dimensions");
! return;
! }
! if (col*row>argc-2){
! post("sparse matrix not yet supported : use \"mtx_check\"");
! return;
! }
adjustsize(&x->m, row, col);
***************
*** 66,72 ****
/* do the pivot thing */
! for (k=0; k<min_rowcol-1; k++){
// 1. find max_element
! t_matrixfloat max = 0;
pivot_row = pivot_col = k;
--- 79,85 ----
/* do the pivot thing */
! for (k=0; k<min_rowcol; k++){
// 1. find max_element
! t_matrixfloat tmp = fabsf(buffer[k*(1+col)]);
pivot_row = pivot_col = k;
***************
*** 77,82 ****
while(j--){
t_matrixfloat f = fabsf(*buf++);
! if (f>max) {
! max=f;
pivot_row = i;
pivot_col = col-j-1;
--- 90,95 ----
while(j--){
t_matrixfloat f = fabsf(*buf++);
! if ((ascending && f>tmp) || (!ascending && f<tmp)) {
! tmp=f;
pivot_row = i;
pivot_col = col-j-1;
***************
*** 84,88 ****
}
}
! // 2. move max el to [k,k]
// 2a swap rows
if (k-pivot_row) {
--- 97,101 ----
}
}
! // 2. move tmp el to [k,k]
// 2a swap rows
if (k-pivot_row) {
***************
*** 128,132 ****
i=row;
m_pre = x->m_pre.atombuffer+2;
! while(i--)SETFLOAT(m_pre+i_pre[i]+i*col, 1);
--- 141,147 ----
i=row;
m_pre = x->m_pre.atombuffer+2;
! while(i--){
! SETFLOAT(m_pre+i_pre[i]+i*row, 1);
! }
***************
*** 143,147 ****
}
! static void *mtx_pivot_new(void)
{
t_mtx_pivot *x = (t_mtx_pivot *)pd_new(mtx_pivot_class);
--- 158,162 ----
}
! static void *mtx_pivot_new(t_floatarg f)
{
t_mtx_pivot *x = (t_mtx_pivot *)pd_new(mtx_pivot_class);
***************
*** 151,154 ****
--- 166,171 ----
x->post = outlet_new(&x->x_obj, 0);
+ x->ascending = (f < 0.f)?0:1;
+
x->m.atombuffer = x->m_pre.atombuffer = x->m_post.atombuffer = 0;
x->m.row = x->m.col = x->m_pre.row = x->m_pre.col = x->m_post.row = x->m_post.col = 0;
***************
*** 160,164 ****
{
mtx_pivot_class = class_new(gensym("mtx_pivot"), (t_newmethod)mtx_pivot_new, (t_method)mtx_pivot_free,
! sizeof(t_mtx_pivot), 0, 0, 0);
class_addmethod(mtx_pivot_class, (t_method)mtx_pivot_matrix, gensym("matrix"), A_GIMME, 0);
--- 177,182 ----
{
mtx_pivot_class = class_new(gensym("mtx_pivot"), (t_newmethod)mtx_pivot_new, (t_method)mtx_pivot_free,
! sizeof(t_mtx_pivot), 0,
! A_DEFFLOAT, 0);
class_addmethod(mtx_pivot_class, (t_method)mtx_pivot_matrix, gensym("matrix"), A_GIMME, 0);
More information about the Pd-cvs
mailing list