📄 guass2.cpp
字号:
#include<stdio.h>
#include<math.h>
#define rank 20
void main()
{
int i,j,mi,k;
float temp;
double q;
float a[rank][rank],b[rank],x[rank];
for( i=0;i<rank;i++) //给所有的A矩阵项先赋初值0
{
for(j=0;j<rank;j++)
{
a[i][j]=0;
}
}
for(i=0;i<rank;i++) //赋对角值
{
a[i][i]=3;
}
for(i=0;i<rank-2;i++) //对称赋 -0.25
{
a[i][i+2]= -(0.25);
a[i+2][i]= -(0.25);
}
for(i=0;i<rank-1;i++) //对称赋 -0.5
{
a[i][i+1]= -(0.5);
a[i+1][i]= -(0.5);
}
for(i=0;i<rank;i++)
{
for(j=0;j<rank;j++)
{
printf("%f",a[i][j]);
}
printf("\n");
}
for(i=0;i<rank;i++) //把系数矩阵赋值!
{
b[i]=3;
}
b[0]=b[19]=(4.50000);
b[1]=b[18]=(3.50000);
for(i=0;i<rank;i++)
{
printf("%f\2t",b[i]);
}
for(i=0;i<rank-1;i++) //选取最大的主元。
{
for(j=i+1,mi=i,q=fabs(a[i][i]);j<rank;j++)
if(fabs(a[j][i])>q)
{
mi=j;
q=fabs(a[j][i]);
}
if(i<mi)
{
temp=b[i];
b[i]=b[mi];
b[mi]=temp;
for(j=i;j<rank;j++)
{
temp=a[i][j];
a[i][j]=a[mi][j];
a[mi][j]=temp;
}
}
for(j=i+1;j<rank;j++) // 此为消元!!!!
{
temp= -a[j][i]/a[i][i];
b[j]+=b[i]*temp;
for(k=i;k<rank;k++)
{
a[j][k]+=a[i][k]*temp;
}
}
}
x[rank-1]=b[rank-1]/a[rank-1][rank-1];
for(i=rank-2;i>=0;i--) //回代求解
{
x[i]=b[i];
for(j=i+1;j<rank;j++)
{
x[i]-=a[i][j]*x[j];
}
x[i]/=a[i][i];
}
printf("矩阵解如下:\n");
for(i=0;i<rank;i++)
{
printf("x%d=%f\n",i,x[i]);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -