#include 
#include 
#include 

void Hilbrt(int n, double *a, double *b);
void Triangle(int n, double *a, double *b);//三对角矩阵 
void Triangle2(int n, int i, double *a, double b);//改良的三对角矩阵 
void Read(); //Read函数没有写好。先以Hilbrt代替 
void Print(int n, double *x);
void Initialize(int n, double *x);
void Grad(int n, double *g, double *A, double *b, double *x); 
int JudgeG(int n, double *g); 
void Dirct(int n,double a, double *d, double *g); 
double PramterT(int n, double dAd, double *d, double *g);
double CoefA(int n, double dAd, double *d, double *A, double *g);
double DTAd(int n, double *d, double *A); 
void NextX(int n, double *d, double *x, double t);

int main(){
	int i,n;
	int flag;
	scanf("%d", &n);
	double A[n*n], b[n];//存储录入的方程
	//double A[n],b;
	double x[n], d[n], g[n], t, a, dAd;//存储解和中间向量 
	Hilbrt(n, A, b);//录入测试矩阵 
	Initialize(n, x);//先给出一组x0,代入x向量中 
	Grad(n, g, A, b, x);//先把x 代入g求出g0 
	flag = JudgeG(n, g);//判断G的距离是不是等于0了 
	//初始化d向量 得到d0 
	for(i = 0; i 10E-15){
			t = PramterT(n, dAd, d, g);//计算t 
		        NextX(n, d, x, t);//通过t计算得到下一组x
			Grad(n, g, A, b, x);//计算g值 现在是g_k+1 
	                flag = JudgeG(n, g);//判断g是否为零 
	        	a = CoefA(n, dAd, d, A, g);//计算系数a 
		        Dirct(n, a, d, g);//根据一组d_k算出d_k+1 
		}else{
			flag = 0;
		}
	}
	t = PramterT(n, dAd, d, g);//计算t 
	NextX(n, d, x, t);
	Print(n, x);//如果g为零的话,输出答案 
	return 0;
} 

void Initialize(int n, double *x){
	int i;
	x[0] = 1.0;
	for(i = 1;i 1.0E-15){
		return 1;
	}else{
		return 0;
	}
}

double DTAd(int n, double *d, double *A){
	double dAd = 0.0;
	double dA[n]; 
	int i,j; 
	for(i = 0; i< n; i++){
		dA[i] = 0;
		for(j = 0; j0){
			a[i*n + i - 1] = 1.0;
		}
	    if(i < n-1){
	    	a[i*n + i + 1] = 1.0;
		}
	}
	b[0] = 11;
	for(i = 1; i 0){
		a[i - 1] = 1;
	}
	if(i < n-1){
		a[i + 1] = 1;
	}
	if(i == 0 || i == n-1){
		b = 11;
	}
}//改良的三对角矩阵