установка вектора в матричный алгоритм справки в C ++ - PullRequest
0 голосов
/ 29 декабря 2011

У меня есть массив X, в котором есть M * N элементов, я пытаюсь создать матрицу A размера M x N с теми же данными. Я использую gsl для матрицы, а X объявлен как массив. У меня проблемы, и я продолжаю перекрываться в матрице.

Вот пример того, что я пытаюсь сделать:

Vector X[4*2]
1,2,3,4,5,6,7,8

Matrix A 4X2
1, 2 
3, 4
5, 6
7, 8

//heres one of my many fail attempts as an example
//creation of array X here
X[n*m] = someCbasedformulafromtheweb(n, m);
//gsl matrix allocation for matrix A N x M
gsl_matrix * A = gsl_matrix_alloc(n, m);
for(int i=0; i<n; i++) { 
    for(int j=0; j<m; j++) { 
        // setting the x[i*j] entry to gsl_matrix A at positions i , j
        gsl_matrix_set (A,i,j, x[i*j]);
    }
}

Ответы [ 2 ]

2 голосов
/ 29 декабря 2011

У меня нет игры с gsl, но разве это не сработает?

for (i=0 ; i<4 ; ++i)
  for (j=0 ; j<2 ; ++j)
    X[2*i + j] = gsl_matrix_get (&A, i, j));
1 голос
/ 29 декабря 2011

Ваша проблема в этой строке:

gsl_matrix_set (A,i,j, x[i*j]);

Вот таблица вещей:

i | j | x[i*j]
0 | 0 | x[0]
0 | 1 | x[0]
1 | 0 | x[0]
1 | 1 | x[1]
2 | 0 | x[0]
2 | 1 | x[2]
3 | 0 | x[0]
3 | 1 | x[3]

Вместо этого вам нужно использовать:

gsl_matrix_set (A,i,j, x[2*i+j]);

i | j | x[2*i+j]
0 | 0 | x[0]
0 | 1 | x[1]
1 | 0 | x[2]
1 | 1 | x[3]
2 | 0 | x[4]
2 | 1 | x[5]
3 | 0 | x[6]
3 | 1 | x[7]
...