j++)
cin>>a[i][j];
}
一般消去法
#include
voidsolve(floatl[][100],floatu[][100],floatb[],floatx[],intn)
{
inti,j;
floatt,s1,s2;
floaty[100];
for(i=1;i<=n;i++)/*第一次回代过程开始*/
{
s1=0;
for(j=1;j
{
t=-l[i][j];
s1=s1+t*y[j];
}
y[i]=(b[i]+s1)/l[i][i];
}
for(i=n;i>=1;i--)/*第二次回代过程开始*/
{
s2=0;
for(j=n;j>i;j--)
{
t=-u[i][j];
s2=s2+t*x[j];
}
x[i]=(y[i]+s2)/u[i][i];
}
}
voidmain()
{
floata[100][100],l[100][100],u[100][100],x[100],b[100];
inti,j,n,r,k;floats1,s2;
for(i=1;i<=99;i++)/*将所有的数组置零,同时将L矩阵的对角值设为1*/
for(j=1;j<=99;j++)
{
l[i][j]=0,u[i][j]=0;
if(j==i)l[i][j]=1;
}
printf("inputn:
\n");/*输入方程组的个数*/
scanf("%d",&n);
printf("inputarrayA:
\n");/*读取原矩阵A*/
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
scanf("%f",&a[i][j]);
printf("inputarrayB:
\n");/*读取列矩阵B*/
for(i=1;i<=n;i++)
scanf("%f",&b[i]);
for(r=1;r<=n;r++)/*求解矩阵L和U*/
{
for(i=r;i<=n;i++)
{
s1=0;
for(k=1;k<=r-1;k++)
s1=s1+l[r][k]*u[k][i];
u[r][i]=a[r][i]-s1;
}
for(i=r+1;i<=n;i++)
{
s2=0;
for(k=1;k<=r-1;k++)
s2=s2+l[i][k]*u[k][r];
l[i][r]=(a[i][r]-s2)/u[r][r];
}
}
printf("arrayL:
\n");/*输出矩阵L*/for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
printf("%7.3f",l[i][j]);
printf("\n");
}
printf("arrayU:
\n");/*输出矩阵U*/
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
printf("%7.3f",u[i][j]);printf("\n");
}
solve(l,u,b,x,n);
printf("解为:
\n");
for(i=1;i<=n;i++)
printf("x%d=%f\n",i,x[i]);
}
(2)
(3)
#include
#include
#include
#defineN20
doublea[N],b[N],c[N-1],f[N],r[N];
intn;
voidLUDecompose();
//LU分解
voidbackSubs();
//回代
voidmain()
{
printf("请输入方程的维数n=");
scanf("%d",&n);
getchar();
if(n>N||n<=0)
{
printf("由于该维数过于犀利,导致程序退出!
");
return;
}
printf("\n输入下三角元素\n");
printf("输入%d个a值:
",n-1);
for(inti=1;iscanf("%lf",&a[i]);
getchar();
printf("\n输入主对角线元素\n");
printf("输入%d个b值:
",n);
for(i=0;iscanf("%lf",&b[i]);
getchar();
printf("\n输入上三角元素\n");
printf("输入%d个c值:
",n-1);
for(i=0;iscanf("%lf",&c[i]);
getchar();
printf("\n输入%d个方程组右端项:
\n",n);
for(i=0;iscanf("%lf",&f[i]);
getchar();
LUDecompose();
backSubs();
printf("\n线性方程组的解为:
\n");
for(i=0;iprintf("x%d=%lf\n",i+1,f[i]);
}
voidLUDecompose(){
c[0]=c[0]/b[0];
for(inti=1;ir[i]=a[i];
b[i]=b[i]-r[i]*c[i-1];
c[i]=c[i]/b[i];
}
r[i]=a[i];
b[i]=b[i]-r[i]*c[i-1];
}
voidbackSubs(){
f[0]=f[0]/b[0];
for(inti=1;if[i]=(f[i]-r[i]*f[i-1])/b[i];
f[n-1]=f[n-1];
for(i=n-2;i>=0;i--)
f[i]=f[i]-c[i]*f[i+1];
}
7.【实验结果与分析总结(含运行结果截图)】