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

📄 gauss.txt

📁 完整的选主元GAUSS消去法解决线性代数方程组问题的C语言实现
💻 TXT
字号:
void   gauss(double   **a,double   *b,double   *x,int   n)   
  {   
  int   i,j,k,ik;   
  double   mik,temp;   
  for(k=0;k<n;k++)   
  {   
  mik=-1;   
  for(i=k;i<n;i++)   
  if(ABS(a[i][k])>mik)   
  {   
  mik=ABS(a[i][k]);   
  ik=i;   
  }   
  for(j=k;j<n;j++)   
  SWAP(a[ik][j],a[k][j]);   
  SWAP(b[k],b[ik]);   
  b[k]/=a[k][k];   
  for(i=n-1;i>=k;i--)   
  a[k][i]/=a[k][k];   
  for(i=k+1;i<n;i++)   
  {   
  b[i]-=a[i][k]*b[k];   
  for(j=n-1;j>=k;j--)   
  a[i][j]-=a[i][k]*a[k][j];   
  }   
  }   
  for(i=n-1;i>=0;i--)   
  {   
  x[i]=b[i];   
  for(j=i+1;j<n;j++)   
  x[i]-=a[i][j]*x[j];   
  }   
  }   















VC-高斯消去法,求分析,那个*b是干啥的
#include <stdio.h> 
#include <math.h> 
#define N 3/*方程阶数*/ 

void myprintf(double a[][N],double *b);/*打印运算矩阵a,b*/ 
void hdai(double a[][N],double *b);/*回代求解*/ 
void lzyxq(double a[][N],double *b);/*高斯变换*/ 
void lzy(double a[][N],double *b,int k);/*行变换*/ 





/*主函数*/ 
void main() 
{ 
double a[N][N]={2,-1,3,2,0,2,4,2,5}; 
double b[N]={1,6,7}; 

lzyxq(a,b); 
myprintf(a,b); 
hdai(a,b); 

} 







/*打印运算矩阵a,b*/ 
void myprintf(double a[][N],double *b) 
{ 
int i,j; 
for(i=0;i<N;i++) 
{ 
for(j=0;j<N;j++) 
{ 
printf("%4.2f",a[j]); 
if(j+1<N) 
printf("X%d+",j+1); 
else 
printf("X%d=",j+1); 
} 
printf("%4.2f\n",b); 
printf("\n\n"); 
} 
} 












/*高斯变换*/ 
void lzyxq(double a[][N],double *b) 
{ 
int i,j,k; 
double l; 
for(k=0;k<N-1;k++) 
{ 
lzy(a,b,k); 
for(i=k+1;i<N;i++) 
{ 
l=a[k]/a[k][k]; 
b-=l*b[k]; 
for(j=k;j<N;j++) 
{ 
a[j]-=l*a[k][j]; 

} 
} 
} 
} 







/*行变换*/ 
void lzy(double a[][N],double *b,int k) 
{ 
int i,j,l,t; 
double tempa,tempb; 
t=k; 
tempa=a[t][k]; 

for(i=k+1;i<N;i++) 
{ 
if(fabs(tempa)<fabs(a[k])) 
{ 
tempa=a[k]; 
t=i; 
} 
} 

if(t!=k) 
{ 
for(j=0;j<N;j++) 
{ 
tempa=a[k][j]; 
a[k][j]=a[t][j]; 
a[t][j]=tempa; 
} 
tempb=b[k]; 
b[k]=b[t]; 
b[t]=tempb; 
} 
} 











/*回代求解*/ 
void hdai(double a[][N],double *b) 
{ 
double X[N]; 
int i,j; 
double sum; 
X[N-1]=b[N-1]/a[N-1][N-1]; 
for(i=N-2;i>=0;i--) 
{ 
sum=0; 
for(j=i+1;j<N;j++) 
sum+=a[j]*X[j]; 
X=(b-sum)/a; 
} 
printf("resout:\n\n"); 
for(i=0;i<N;i++) 
{ 
printf("X[%d]=%4.2f\n\n",i+1,X); 
} 
} 




请问void myprintf(double a[][N],double *b);/*打印运算矩阵a,b*/ 
void hdai(double a[][N],double *b);/*回代求解*/ 
void lzyxq(double a[][N],double *b);/*高斯变换*/ 
void lzy(double a[][N],double *b,int k);/*行变换*/ 

这4行的*b有什么用呢?
本贴来自ZDNetChina中文社区 http://bbs.zdnet.com.cn ,本贴地址:http://bbs.zdnet.com.cn/viewthread.php?tid=872316







⌨️ 快捷键说明

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