I have a 2x2 matrix A stored in data_

1 3 2 4 (column major order)

and a 2x2 matrix B stored in b.data_

5 7 6 8

and I'm using the function below to append (stick underneath) B to A.

so my result should be 1 3 5 7 2 4 6 8

however the result I'm getting is 1 3 0 0 2 4 6 8

so copy[2] and copy [3] are not getting calculated correctly yet I've worked it out on paper and it seems fine? Can anyone please spot what is wrong?

Thanks in advance!

void Matrix::AppendBelow(Matrix b)
{
    vector<double> copy;
    copy.resize (data_.size()+b.data_.size());
    for (int i = 0; i < data_.size(); i++)
    {
        copy[i] = 0;
        copy[i*mdim_ - (i % mdim_)] = data_[i];
        copy[i*mdim_ + (((i+1) % mdim_) + 1)] = b.data_[i];
    }

    data_.resize (copy.size());
    for (int k = 0; k < data_.size(); k++)
    {

        data_[k] = copy[k];
        cout<<" "<<data_[k]<<" ";
    }
}

just out of curiosity, was it because of this, your loop only initialised copy[0] and copy[1] but not copy[2] and copy[3]?

for (int i = 0; i < data_.size(); i++)    
{        
    copy[i] = 0;        
..
}

Edited 3 Years Ago by mike_2000_17: Fixed formatting

Hi Techi,

I'm not exactly sure why, but putting

copy = 0;

into its own separate loop fixed the problem...I still used
for (int i = 0; i < data_.size(); i++) in the separate loop, so I'm baffled! data_.size() is 8 so it would have initialised copy [2] and [3].

no, i think u confused array size A with array size C (let's call them A B C for simplicity. data_.size is the size of A.

i've simplified this:

for (int i = 0; i < data_.size(); i++)    
{        
    copy[i] = 0;        
    copy[i*mdim_ - (i % mdim_)] = data_[i];        
    copy[i*mdim_ + (((i+1) % mdim_) + 1)] = b.data_[i];    
}
===========================
for (int i = 0; i < 2; i++)    
{        
    c[i] = 0;        
    c[i*2 - (i % 2)] = a[i];        
    c[i*2 + (((i+1) % 2) + 1)] = b[i];    
}

a=1,3   2,4
b=5,7   6,8

when i=0
    c[0] = 0
    c[0] = a[0] = 1,3
    c[2] = b[0] = 5,7   


when i=1
    c=[1] = 0
    c=[1] = a[1] = 2,4
    c=[3] = b[1] = 6,8

can u see some initialisation missing?

Edited 3 Years Ago by mike_2000_17: Fixed formatting

This question has already been answered. Start a new discussion instead.