求教大神帮小弟我看看这段代码,运行出了什么1.inf
求教大神帮我看看这段代码,运行出了什么1.#inf
#include <stdio.h>
#include<math.h>
#define N 3
void dairu(double L[][N], double U[][N],double x[N])
{
int i,j;
//前代法
for(i=0;i<N;i++)
{ x[i]/=L[i][i];
if( x[i]==0)
printf("error");
for(j=i+1;j<N;j++)
{x[j]-=x[i]*L[j][i];}
}
//后代法
for(i=N-1;i>=0;i--)
{ x[i]/=U[i][i];
if( x[i]==0)
printf("error");
for(j=i-1;j>0;j--)
{x[j]-=x[i]*U[j][i];}
}
}
void sel_gauss(double a[][N])//列主元gauss消去法
//dolittle型
{
int i,j,t,note;
double max;
for(t=0;t<N-1;t++)
{
//判断,交换部分
max=a[t][t];
note=t;
for(i=t+1;i<N;i++)
{
if(abs(a[i][t])>abs(max))
{max=a[i][t];note=i;
}
}
for(i=0;i<N;i++)
{j=a[t][i];
a[t][i]=a[note][i];
a[note][i]=j;
}
//消去部分
for(i=t+1;i<N;i++)
a[i][t]/=a[t][t];
for(i=t+1;i<N;i++)
for(j=t+1;j<N;j++)
a[i][j]-=(a[i][t]*a[t][j]);
}
}
main()
{double a[N][N]={{3.0,4.0,5.0},{2.0,3.0,4.0},{1.0,2.0,3.0}},b[N]={12,9,6},L[N][N]={0},U[N][N]={0};
int i,j;
sel_gauss(a);
//给L赋值
for(i=0;i<N;i++)
L[i][i]=1;
for(i=0;i<N;i++)
for(j=i+1;j<N;j++)
L[j][i]=a[j][i];
//给U赋值
for(i=0;i<N;i++)
for(j=i;j<N;j++)
U[i][j]=a[i][j];
dairu(L,U,b);
for(i=0;i<N;i++)
{for(j=0;j<N;j++)
printf("%lf\t",a[i][j]);
printf("\n");}
for(i=0;i<N;i++)
printf("%lf\n",b[i]);
}
------解决方案--------------------
U的部分数组值可能出现了除数为0等算数上不成立的事件
------解决方案--------------------
单步调试看看,有值出现了溢出,或者除数为0这种情况
#include <stdio.h>
#include<math.h>
#define N 3
void dairu(double L[][N], double U[][N],double x[N])
{
int i,j;
//前代法
for(i=0;i<N;i++)
{ x[i]/=L[i][i];
if( x[i]==0)
printf("error");
for(j=i+1;j<N;j++)
{x[j]-=x[i]*L[j][i];}
}
//后代法
for(i=N-1;i>=0;i--)
{ x[i]/=U[i][i];
if( x[i]==0)
printf("error");
for(j=i-1;j>0;j--)
{x[j]-=x[i]*U[j][i];}
}
}
void sel_gauss(double a[][N])//列主元gauss消去法
//dolittle型
{
int i,j,t,note;
double max;
for(t=0;t<N-1;t++)
{
//判断,交换部分
max=a[t][t];
note=t;
for(i=t+1;i<N;i++)
{
if(abs(a[i][t])>abs(max))
{max=a[i][t];note=i;
}
}
for(i=0;i<N;i++)
{j=a[t][i];
a[t][i]=a[note][i];
a[note][i]=j;
}
//消去部分
for(i=t+1;i<N;i++)
a[i][t]/=a[t][t];
for(i=t+1;i<N;i++)
for(j=t+1;j<N;j++)
a[i][j]-=(a[i][t]*a[t][j]);
}
}
main()
{double a[N][N]={{3.0,4.0,5.0},{2.0,3.0,4.0},{1.0,2.0,3.0}},b[N]={12,9,6},L[N][N]={0},U[N][N]={0};
int i,j;
sel_gauss(a);
//给L赋值
for(i=0;i<N;i++)
L[i][i]=1;
for(i=0;i<N;i++)
for(j=i+1;j<N;j++)
L[j][i]=a[j][i];
//给U赋值
for(i=0;i<N;i++)
for(j=i;j<N;j++)
U[i][j]=a[i][j];
dairu(L,U,b);
for(i=0;i<N;i++)
{for(j=0;j<N;j++)
printf("%lf\t",a[i][j]);
printf("\n");}
for(i=0;i<N;i++)
printf("%lf\n",b[i]);
}
------解决方案--------------------
U的部分数组值可能出现了除数为0等算数上不成立的事件
------解决方案--------------------
单步调试看看,有值出现了溢出,或者除数为0这种情况