function partablg(f,x,y,a,dai)
{
	var aa=a[dai];
	a[dai]-=1e-8;
	var y1=eval(f);
	a[dai]=aa+1e-8;
	var y2=eval(f);
	a[dai]=aa;
	return (y2-y1)*0.5e8;
}
function koeffmatrixg(f,x,y,a,aa)
{
	var n=aa.length,i,j,k=0;
	var m=new Array(n*(n+1));
	for(i=0;i<n;i++)
	{
		for(j=0;j<n;j++)m[k++]=(j>=i)?gsumffg(f,x,y,a,aa[i],aa[j]):m[j*(n+1)+i];
		m[k++]=gsumfyg(f,x,y,a,aa[i]);
	}
	return m;
}
function gsumffg(f,x,y,a,i,j)
{
	var s=0,k,n=x.length;
	for(k=0;k<n;k++)s+=partablg(f,x[k],y[k],a,i)*partablg(f,x[k],y[k],a,j);
	return s;
}
function gsumfyg(f,xx,yy,a,i)
{
	var s=0,k,n=xx.length,x,y;
	for(k=0;k<n;k++){x=xx[k];y=yy[k];s+=partablg(f,x,y,a,i)*(-eval(f));}
	return s;
}
function regrnlg(f,x,y,a,iter,sw)
{
	var n=a.length,i,j;
	var aa=new Array();aaa=new Array();
	for(i=0;i<n;i++){if(f.indexOf("a["+i+"]")>-1){aa[aa.length]=a[i];aaa[aaa.length]=i;}}
	n=aa.length;
	if(iter==null)iter=1;
	if(sw==null)sw=schrittweitenparameter;
	for(i=0;i<iter;i++)
	{
		var m=koeffmatrixg(f,x,y,a,aaa);
		var v=new Array(n);
		GLSL(m,v,n);
		for(j=0;j<n;j++)a[aaa[j]]+=v[j]*sw;
	}
	return a;
}
function fktg(f,x,y,a){return eval(f);}
function varianzg(f,xx,yy,a)
{
	var v=0,i,d,y,x;
	for(i=0;i<xx.length;i++){x=xx[i];y=yy[i];d=eval(f);v+=d*d;}
	return v/xx.length;
}
