⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 levin.h

📁 用C开发的莱文森算法
💻 H
字号:

//t:对称LEVIN矩阵元素
//b:方程组右端常数
//X:解
int levin(double t[],double b[],int n,double x[])
{ int i,j,k;
  double a,beta,q,c,h,*y,*s;
  
  s=(double *)malloc(n*sizeof(double));
  y=(double *)malloc(n*sizeof(double));

  a=t[0];
  if((fabs(a)+1)==1.0)
  { free(s);
    free(y);
	printf("ill!\n");
	return -1;
  }

  y[0]=1.0;
  x[0]=b[0]/a;
  for(k=1;k<n;k++)
  { beta=0;
    q=0;
	 for(j=0;j<k;j++)
	 { 
	   beta+=y[j]*t[j+1];
	   q+=x[j]*t[k-j];

	 }

   if((fabs(a)+1)==1.0)
   { free(s);
    free(y);
	printf("ill!\n");
	return -1;
   }
	 
   c=-beta/a;
   s[0]=c*y[k-1];
   y[k]=y[k-1];

   if(k!=1)
   { for(i=1;i<k;i++)
      s[i]=y[i-1]+c*y[k-i-1];
   }

   s[k]=y[k-1];
   a+=c*beta;
   
   if((fabs(a)+1)==1.0)
   { free(s);
    free(y);
	printf("ill!\n");
	return -1;
   }
   
    h=(b[k]-q)/a;
 
    for(i=0;i<k;i++)
	{ x[i]+=h*s[i];
	  y[i]=s[i];
	}
    
	x[k]=h*y[k];
  }
   free(s);
   free(y);

   return(1);


}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -