📄 列主元高斯消去法.cpp
字号:
#include <iostream.h>
#include <math.h>
#include <iomanip.h>
#define length 9
void fun(double a[length][length],double b[length])
{
int i,j,k,i0;
double temp;
/*比较出列主元及交换行,并进行消元*/
for(k=0;k<length;k++)
{
temp=fabs(a[k][k]);
i0=k;
for(i=k+1;i<length;i++)
{
if(fabs(a[i][k])>temp)
{
temp=fabs(a[i][k]);
i0=i;
}
}
if(i0!=k) /*io作为标志位指示需交换行*/
{
for(j=0;j<length;j++)
{
temp=a[k][j];a[k][j]=a[i0][j];a[i0][j]=temp;
}
temp=b[k];b[k]=b[i0];b[i0]=temp;
}/*用temp来存放所有的中间变量*/
for(i=k+1;i<length;i++)
{
for(j=k+1;j<length;j++)
{
a[i][j]=a[i][j]-a[i][k]/a[k][k]*a[k][j];
}
b[i]=b[i]-a[i][k]/a[k][k]*b[k];
}
}
/*写出解向量*/
b[length-1]=b[length-1]/a[length-1][length-1];
for(i=length-2;i>=0;i--)
{
for(j=length-1;j>i;j--)
{
b[i]=b[i]-a[i][j]*b[j];
}
b[i]=b[i]/a[i][i];
} /*用b[]来存放解向量*/
}
void main()
{
double R[length][length]={{31,-13,0,0,0,-10,0,0,0},
{-13,35,-9,0,-11,0,0,0,0},
{0,-9,31,-10,0,0,0,0,0},
{0,0,-10,79,-30,0,0,0,-9},
{0,0,0,-30,57,-7,0,-5,0},
{0,0,0,0,-7,47,-30,0,0},
{0,0,0,0,0,-30,41,0,0},
{0,0,0,0,-5,0,0,27,-2},
{0,0,0,-9,0,0,0,-2,29}};
double V[length]={-15,27,-23,0,-20,12,-7,7,10};
int i;
fun(R,V);
for(i=0;i<length;i++)
{cout<<setprecision(5)<<V[i]<<endl;}
}
/*结果:
-0.28923
0.34544
-0.71281
-0.22061
-0.4304
0.15431
-0.057823
0.20105
0.29023*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -