template <class G, class K>
struct Fred2 {
	const Doub a,b;
	const Int n;
	G &g;
	K &ak;
	VecDoub t,f,w;
	Fred2(const Doub aa, const Doub bb, const Int nn, G &gg, K &akk) :
		a(aa), b(bb), n(nn), g(gg), ak(akk), t(n), f(n), w(n)
	{
		MatDoub omk(n,n);
		gauleg(a,b,t,w);
		for (Int i=0;i<n;i++) {
			for (Int j=0;j<n;j++)
				omk[i][j]=Doub(i == j)-ak(t[i],t[j])*w[j];
			f[i]=g(t[i]);
		}
		LUdcmp alu(omk);
		alu.solve(f,f);
	}

	Doub fredin(const Doub x)
	{
		Doub sum=0.0;
		for (Int i=0;i<n;i++) sum += ak(x,t[i])*w[i]*f[i];
		return g(x)+sum;
	}
};