2012-04-12 5 views
0

Я преобразовываю код matlab в код C++ и пытаюсь найти функцию в Lapack, Blas или даже Atlas, которая выполняет ту же работу в функции Diag (k) в matlab? Какие-либо предложения ?Каков альтернативный метод для Diag (k) в C++?

+0

"' Diag (k) '"? Вы имеете в виду создание диагональной матрицы из вектора или извлечение диагонали любой матрицы в виде вектора? – leftaroundabout

+0

... и ответ зависит от того, как вы представляете матрицы и вектор в C++. В частности, каков тип 'k'? В любом случае вам не нужен Blas или Lapack (ATLAS - это просто их реализация), поскольку все это простой цикл над индексом: 'for (i = 0; i sly

ответ

0
static void create_diagonal_matrix(T* matrix,T* v,int size) 
    { 
     for(int i=0;i<size;i++) 
     { 
      for(int32_t j=0;j<size;j++) 
      { 
       if(i==j) 
        matrix[j*size+i]=v[i]; 
       else 
        matrix[j*size+i]=0; 
      } 
     } 
    } 
0

GSL, the Gnu Scientific Library имеет функцию gsl_matrix_diagonal (gsl_matrix * m). Это создает «векторный вид» в матрице, которая является более или менее вектором gsl, сглаженным по диагонали матрицы. Dunno, если вы любите GSL, но также включает поддержку BLAS. Я думаю, что это очень хорошая библиотека.