Boost logo

Boost :

From: nisha kannookadan (nishak44_at_[hidden])
Date: 2007-11-20 14:36:20


Wow, Im very impressed, I already got so much answers. Thanks a lot.
I didnt realize, that there are different lists, sorry.

The Code is quite huge. But I post here, a part, which takes quite a lot of time: These are two methods for wavelet transformations:

matrix Wavelet::ttrans(matrix At, int level)
{
        matrix cfe1, cfe2, cfo, cfe, c, d;
        int N,s2;
        
        N = (At.size1()+1)/2;
        s2 = At.size2();
        zero_matrix zer(N,s2);
        
        for (int ii = 1; ii <= level; ii++)
        {
                cfo.resize(N,s2,false);
                cfe.resize(N-1,s2,false);
                c.resize(N-1,s2,false);
                d.resize(N,s2,false);
                cfo.assign(subslice(At, 0,2,N, 0,1,s2));
                cfe.assign(subslice(At, 1,2,N-1, 0,1,s2));
                
                c.assign(cfe + (subrange(cfo, 0,N-1, 0,s2)+subrange(cfo, 1,N, 0,s2))*0.5);
                
                zer.resize(N,s2,true);
                cfe1.resize(N,s2,false);
                cfe2.resize(N,s2,false);
                cfe1.assign(zer);
                cfe2.assign(zer);
                
                (subrange(cfe1, 0,N-1, 0,s2)).assign(cfe);
                (subrange(cfe2, 1,N, 0,s2)).assign(cfe);
                d.assign(cfo-(cfe1+cfe2)*0.5);
                
            (subrange(At, 0,N-1, 0,At.size2())).assign(c);
            (subrange(At, N-1,2*N-1, 0,At.size2())).assign(d);
            
            N = N/2;
        }
        
        cfe1.clear();
        cfe2.clear();
        cfo.clear();
        cfe.clear();
        c.clear();
        d.clear();
         
        return At;
        
}

matrix Wavelet::itrans(matrix At,int level)
{
        matrix inv_M,tmp;
        vector f1,f2;
        int N,m;
        
        N = (At.size1()+1)/2;
        scalar_vector e(2*N-1,1);
        scalar_vector f(2*N-2,0.5);
        m = At.size2();
        
        for (int ii=1; ii<=level; ii++)
        {
          
           e.resize(2*N-1,true);
           f.resize(2*N-2,true);
           f1 = f;
           f2 = f;
           for(int jj = 0; jj < 2*N-3; jj = jj+2)
           {
                   f2(jj) = -0.5;
                   f1(jj+1) = -0.5;
           }
           
           inv_M.resize(2*N-1,2*N-1,false);
           inv_M = MVHF::tri_inverse(e,f1,f2);
           tmp.resize(2*N-1,m);
           tmp.assign(prod(inv_M,subrange(At, 0,2*N-1, 0,m)));
           
           (subrange(At, 0,N-1, 0,At.size2())).assign(subslice(tmp, 1,2,N-1, 0,1,tmp.size2()));
           (subrange(At, N-1,2*N-1, 0,At.size2())).assign(subslice(tmp, 0,2,N, 0,1,tmp.size2()));
           
           N = N/2;
        }

        inv_M.clear();
        tmp.clear();
        f1.clear();
        f2.clear();
                
        return At;
}

I did it like that, bcuz I realized that using 'assign' does it make a bit faster,though a lot of resize is needed. I use Eclipse, so is it possible to adapt the Debugging stuff there? Or does it need to be in a makefile...yeah, I know, I dont know the basic stuff :). I read about the library binding, but I actually dont need things like svd, lu..all I need is prod,solve,element_div and the methods above. So not to freaky things, so I probabaly dont need the bindings, right?

Anyways, I thank you all very much..I never got answers so fast in a forum..I appreciate it.

_________________________________________________________________
Discover the new Windows Vista
http://search.msn.com/results.aspx?q=windows+vista&mkt=en-US&form=QBRE


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk