Esempio n. 1
0
int
main(void)
{
  QLA_ColorMatrix x, y, c, f, f2, yt;

  for(int i=0; i<QLA_Nc; i++) {
    for(int j=0; j<QLA_Nc; j++) {
      QLA_c_eq_r_plus_ir(QLA_elem_M(x,i,j), i+1, QLA_Nc*(j+1));
      QLA_c_eq_r_plus_ir(QLA_elem_M(c,i,j), QLA_Nc*(j+1), i-1);
      //QLA_c_eq_r(QLA_elem_M(x,i,j), 0);
      //QLA_c_eq_r(QLA_elem_M(c,i,j), 0);
    }
    QLA_c_eq_r_plus_ir(QLA_elem_M(x,i,i), 2+1, 1);
    QLA_c_eq_r_plus_ir(QLA_elem_M(c,i,i), 0.1, 0.5);
  }
  QLA_M_eq_sqrt_M(&y, &x);
  QLA_M_eq_Ma(&yt, &y);
  //sqrt_deriv_site(&f, &y, &x, &c);
  sylsolve_site(&f, &y, &y, &c);
  printm(&x);
  printm(&y);
  printm(&c);
  printm(&f);

  QLA_ColorMatrix dx, dy;
  for(int i=0; i<QLA_Nc; i++) {
    for(int j=0; j<QLA_Nc; j++) {
      QLA_Real eps = 1e-6;
      QLA_M_eq_M(&dx, &x);
      QLA_c_peq_r(QLA_elem_M(dx,i,j), eps);
      QLA_M_eq_sqrt_M(&dy, &dx);
      QLA_M_meq_M(&dy, &y);
      QLA_Real ieps = 1/eps;
      QLA_M_eq_r_times_M(&dy, &ieps, &dy);
      //printm(&dy);
      QLA_M_eq_M_times_Ma(&f2, &dy, &c);
      QLA_Real r;
      QLA_R_eq_re_trace_M(&r, &f2);
      printf("%g\n", r);
    }
  }
//  printm(&f2);
  return 0;
}
Esempio n. 2
0
void
set_M(QLA_ColorMatrix *m, int i)
{
#if 0
  static QLA_ColorMatrix t;
  for(int j=0; j<QLA_Nc; j++) {
    for(int k=0; k<QLA_Nc; k++) {
      QLA_c_eq_r_plus_ir(QLA_elem_M(*m,j,k),
			 (((j-k+QLA_Nc+1)*(j+k+1))%19)+cos(i),
			 (((j+4)*(k+1))%17)+sin(i));
      //QLA_real(QLA_elem_M(*m,j,k)) = 1;
      //QLA_imag(QLA_elem_M(*m,j,k)) = 0;
    }
  }
#endif
  for(int j=0; j<QLA_Nc; j++) {
    for(int k=0; k<QLA_Nc; k++) {
      QLA_c_eq_r(QLA_elem_M(*m,j,k), 0);
    }
  }
  QLA_Real step = 1e-5;
  if(Mtype&MtypeNZ) {
    for(int j=0; j<QLA_Nc; j++) {
      QLA_c_peq_r_plus_ir(QLA_elem_M(*m,j,j), step, -step);
    }
  }
  int ii=i;
  if((Mtype&MtypeNN)==0) ii>>=QLA_Nc;
  for(int j=0,k=1; ii; ii>>=1,j++) {
    if(j>=QLA_Nc) { j=0; k*=2; }
    if(ii&1) QLA_c_peq_r_plus_ir(QLA_elem_M(*m,j,j), k*step, -k*step);
  }
  ii = i;
  if((Mtype&MtypeNN)==0) {
    for(int j=0; j<QLA_Nc; j++) {
      if(ii&1) QLA_c_eqm_c(QLA_elem_M(*m,j,j), QLA_elem_M(*m,j,j));
      ii >>= 1;
    }
  }
  if(Mtype&MtypeH) { // make Hermitian
    QLA_ColorMatrix m2;
    QLA_M_eq_M(&m2, m);
    QLA_M_peq_Ma(&m2, m);
    QLA_M_eq_M(m, &m2);
  }
  if((Mtype&MtypeP)&&(Mtype&MtypeH)) { // make positive Hermitian
    QLA_ColorMatrix m2;
    QLA_M_eq_M_times_Ma(&m2, m, m);
    QLA_M_eq_M(m, &m2);
  }
  if(Mtype&MtypeA) { // make anti-Hermitian
    QLA_ColorMatrix m2;
    QLA_M_eq_M(&m2, m);
    QLA_M_meq_Ma(&m2, m);
    QLA_M_eq_M(m, &m2);
  }
  if((Mtype&MtypeT)&&(Mtype&MtypeA)) { // make traceless anti-Hermitian
    QLA_ColorMatrix m2;
    QLA_M_eq_antiherm_M(&m2, m);
    QLA_M_eq_M(m, &m2);
  }
  //QLA_Real n2;
  //QLA_r_eq_norm2_M(&n2, m);
  //printf("%i\t%g\n", i, n2);
}