Hi Some practical comments:
* Please keep the list CC'ed (press reply to all) instead of just sending me a private mail; that way others can help. * If you send code, please send ALL relevant code. The code you send does NOT compile (you have not included relevant headers, defined HELP or NUM_ARG and you have not declared calc_tnorm). * Please send the code as an attached file so that we don't have to copy go through the trouble of creating a new file and copying the contents of an e-mail to this file (this is relevant not only to make our lives easier, but also to keep the encoding). * Please tell us what you did to compile the code. * Please tell us what you did to run the code. Søren man, 27 12 2010 kl. 15:54 +0100, skrev w4nderlust: > I did that because it was suggested in the api manual. > Anyway, if i remove it it compiles, but when i run it in octave i get > this error: > error: Sparse::SparseRep::elem (octave_idx_type, octave_idx_type): sparse > matri > x filled > > here's the full code: > > DEFUN_DLD (spmaxmin_ST, args, nargout, HELP) > > { > > if (args.length() != NUM_ARG) > > print_usage(); > > else > > { > > SparseMatrix a = args(0).sparse_matrix_value(); > > SparseMatrix b = args(1).sparse_matrix_value(); > > dim_vector dimsA = a.dims(); > > int rowsA = dimsA(0); > > int colsA = dimsA(1); > > > > dim_vector dimsB = b.dims(); > > int rowsB = dimsB(0); > > int colsB = dimsB(1); > > > > SparseMatrix c = SparseMatrix(rowsA, colsB, rowsA*colsB); > > dim_vector dimsC = c.dims(); > > int rowsC = dimsC(0); > > int colsC = dimsC(1); > > > > //const SparseMatrix tmp(c); > > int i,j,k; > > double mx,mn; > > if (colsA != rowsB) > > print_usage(); > > else > > { > > for (i = 0; i < rowsC; i++) > > { > > for(j = 0; j < colsC; j++) > > { > > mx = 0; > > for (k = b.cidx(j); k <= (b.cidx(j+1) - > 1); k++) > > { > > mn = calc_tnorm(a(i, > b.ridx(k)), b.data(k)); > > if (mn > mx) > > mx = mn; > > } > > if (mx != 0) > > c(i, j) = mx; > > } > > } > > c.maybe_compress(); > > return octave_value(c); > > } > > } > > } > > > > 2010/12/27 Søren Hauberg <so...@hauberg.org>: > > man, 27 12 2010 kl. 15:37 +0100, skrev w4nderlust: > >> Hello everyone. > >> Compiling an octfile i'm experiencing a compile error. > >> spmaxmin_ST.cc:62: error: lvalue required as left operand of assignment > >> > >> that's how my code works: > >> //i create a sparse matrix > >> SparseMatrix c = SparseMatrix(rowsA, colsB, rowsA*colsB); > >> > >> //i create a constart temp matrix as suggested in the documentation > >> const SparseMatrix tmp(c); > >> > >> //somewhere in my code i do > >> if (mx != 0) > >> > >> tmp(i, j) = mx; > >> //mx is a double and it is initialized > >> > >> the problem is: > >> tmp(i, j) = mx; > >> > >> i don't know what's wrong because in the documentation there are a lot > >> of examples with this way of accessing the matrix... > >> Can someone please help me? > > > > I don't know the sparse matrix API that well, but it looks like you have > > declared a constant matrix tmp (constant means that it will not be > > changed during the rest of the program). You then alter this matrix (by > > 'tmp(i, j) = mx'), which is not possible if the matrix is constant. I > > don't know this trick with the constant temp matrix, but it seems like > > that is the source of your troubles. > > > > Søren > > > > ------------------------------------------------------------------------------ Learn how Oracle Real Application Clusters (RAC) One Node allows customers to consolidate database storage, standardize their database environment, and, should the need arise, upgrade to a full multi-node Oracle RAC database without downtime or disruption http://p.sf.net/sfu/oracle-sfdevnl _______________________________________________ Octave-dev mailing list Octave-dev@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/octave-dev