Exemple #1
0
int
linalg_prod (lua_State *L)
{
  const gsl_matrix *a = matrix_check (L, 1);
  const gsl_matrix *b = matrix_check (L, 2);
  gsl_matrix *r = matrix_push (L, a->size2, b->size2);

  if (a->size1 != b->size1)
    luaL_error (L, "incompatible matrix dimensions in multiplication");

  gsl_blas_dgemm (CblasTrans, CblasNoTrans, 1.0, a, b, 1.0, r);

  return 1;
}
Exemple #2
0
int
linalg_svd (lua_State *L)
{
  const gsl_matrix *a = matrix_check (L, 1);
  int sm = a->size1, sn = a->size2;
  gsl_matrix *u, *v, *s;
  gsl_vector *s_vec, *work;
  int k;

  u = matrix_push_raw (L, sm, sn);
  s = matrix_push_raw (L, sn, sn);
  v = matrix_push_raw (L, sn, sn);

  s_vec = gsl_vector_alloc (sn);
  work = gsl_vector_alloc (sn);

  gsl_matrix_memcpy (u, a);
  gsl_linalg_SV_decomp (u, v, s_vec, work);

  for (k = 0; k < sn; k++)
    {
      double z = gsl_vector_get (s_vec, k);
      gsl_matrix_set (s, k, k, z);
    }

  gsl_vector_free (s_vec);
  gsl_vector_free (work);

  return 3;
}
Exemple #3
0
void
solver_get_x0 (lua_State *L, gsl_vector_view *x0, size_t p)
{
  gsl_matrix *m;
  lua_getfield (L, 1, "x0");
  m = matrix_check (L, -1);
  if (m->size2 != 1 || m->size1 != p)
    luaL_error (L, "x0 should be a vector of length %d", p);
  *x0 = gsl_matrix_column (m, 0);
  lua_pop (L, 1);
}
Exemple #4
0
void check_matrix_mul_dotp(testresult_t *result, void (*start)(), void (*stop)()) {

  int N = SIZE;
  int M = SIZE;

  signed short matA[N*M];
  signed short matB[N*M];
  signed int  matC[N*M];

  matrix_init(matA, matB, matC);

  // start benchmark
  start();

  matMul16_t_dot(matA, matB, matC, N, M);
  
  stop();

  result->errors = matrix_check(matC);
}