线性方程组的解法
- 格式: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