线性方程组的解法

  • 格式:doc
  • 大小:31.50 KB
  • 文档页数:3

线性方程组的解法:

一:LU解法:

//本程序所包含的 系统头文件

# include

//命名空间的声明

using namespace std;

//程序的 入口点 主函数

int main(){

//声明两个全局变量

double s1=0,s2=0;

//定义 一个二维 矩阵 来 存储 该线性方程组的系数

double A[4][4]={{2,-1,0,0},{-1,2,-1,0},{0,-1,2,-1},{0,0,-1,2}};

//定义一个一维数组来存储该线性方程组的 右端项

double B[4]={1,0,0,1};

//声明两个 二维数组 的长度 分别是四行四列

double L[4][4];

double U[4][4];

//利用双重的for 循环使得 下三角矩阵L的上三角元素 以及上三角矩阵U的下三角元素

都为0

for(int r=0;r<4;r++){

for(int s=r+1;s<4;s++){

L[r][s]=0;

U[s][r]=0;

}

}

//利用双重for 循环 将下三角矩阵 L的对角线上的 元素都初始化为1

for(int m=0;m<4;m++)

for(int n=0;n<4;n++)

if(n==m)

L[m][n]=1;

//利用for 循环 根据系数矩阵A 以及右端矩阵B 来计算 下三角矩阵L 以及上三角矩阵U

的其他元素

for(int i=0;i<4;i++){

for(int j=i;j<4;j++)

//求上三角矩阵u的第一行 以及下三角矩阵l的 第一列

if(i==0){

U[i][j]=A[i][j]/L[i][i];

L[j][i]=A[j][i]/U[i][i];

}

//接下来 再继续求 u的行元素 以及l的列元素

else{

//加入一个循环来求 其中涉及到的求和式

for(int k=0;k

s1+=L[i][k]*U[k][j];

s2+=L[j][k]*U[k][i];

}

//上三角u的行元素 以及下三角l的列元素

U[i][j]=(A[i][j]-s1)/L[i][i];

L[j][i]=(A[j][i]-s2)/U[i][i];

//清空全局变量s1 s2 的值

s1=s2=0;

}

}

//最后 利用for 循环 分别将下三角矩阵L的所有元素全部输出

for(int p=0;p<4;p++){

for(int q=0;q<4;q++)

cout<

cout<

}

//换行语句 cout<

//利用for 循环将上三角矩阵U的 所有元素 全部输出

for(int h=0; h<4;h++){

for(int k=0;k<4;k++)

cout<

cout<

}

cout<

return 0;

}

运行结果:

1 0 0 0

-0.5 1 0 0

0 -0.666667 1 0

0 0 -0.75 1

2 -1 0 0

0 1.5 -1 0

0 0 1.33333 -1

0 0 0 1.25