void tridag(VecDoub_I &a, VecDoub_I &b, VecDoub_I &c, VecDoub_I &r, VecDoub_O &u) { Int j,n=a.size(); Doub bet; VecDoub gam(n); if (b[0] == 0.0) throw("Error 1 in tridag"); u[0]=r[0]/(bet=b[0]); for (j=1;j=0;j--) u[j] -= gam[j+1]*u[j+1]; } void cyclic(VecDoub_I &a, VecDoub_I &b, VecDoub_I &c, const Doub alpha, const Doub beta, VecDoub_I &r, VecDoub_O &x) { Int i,n=a.size(); Doub fact,gamma; if (n <= 2) throw("n too small in cyclic"); VecDoub bb(n),u(n),z(n); gamma = -b[0]; bb[0]=b[0]-gamma; bb[n-1]=b[n-1]-alpha*beta/gamma; for (i=1;i