资源简介

本C++程序用列主元LU分解法来解线性方程组

资源截图

代码片段和文件信息

/********************************************************************
本程序用来解四维线性方程组。当然,将在最开始将N换成其他
数字、系数矩阵和右侧矩阵换掉即可解更多维的线性方程组
在运行本程序前,一定要确保方程组有解(通过线性代数里学的知识加以判断)
********************************************************************/
#include
#include
#include
#define N 4
//作函数声明:
void DirectLU(double a[N][N+1]double []);    //定义函数作LU分解并求得最终解
void swap(double &double &);       //交换函数用来交换两个元素

int main()
{
double x[N];
int ij;
double a[N][N+1]={
1-12-1-8
2-23-3-20
1110-2
1-1434
};                      
double y[N]={-8-20-24};   //输入系数矩阵和矩阵y
cout<<“系数矩阵为: \n“;
for(i=0;i for(j=0;j cout< cout< }
cout<<“矩阵 y 为: \n“;
for(i=0;i cout< cout< cout<<“----------------------------------------“<
DirectLU(ax);

cout<<“LU矩阵为: \n“;
for(i=0;i for(j=0;j cout< cout< }
cout<<“变换后的矩阵 y 为: \n“;
for(i=0;i cout< cout< cout<<“----------------------------------------“<
cout<<“方程的解为: \n“;
for(i=0;i cout<<“x[“< cout<<“----------------------------------------“<
return 0;
}

void swap(double &adouble &b)   
{
a=a+b;
b=a-b;
a=a-b;
}

void DirectLU(double a[N][N+1]double x[])
{
int irkj;
double s[N]t[N];//={-20814-0.8};
double max;
for(r=0;r {
max=0;
j=r;
for(i=r;i {
s[i]=a[i][r];
for(k=0;k s[i]-=a[i][k]*a[k][r];
s[i]=s[i]>0?s[i]:-s[i];  //s[i]取绝对值
if(s[i]>max){
j=i;
max=s[i];
}
}
/*************************************************
if(max==0){
cout<<“输入的矩阵有误,该方程组无解!!!“< return;
}
*************************************************/
if(j!=r)             //选出的主元所在行j若不是r则对两行相应元素进行调换
{
for(i=0;i swap(a[r][i]a[j][i]);
}
for(i=r;i for(k=0;k a[r][i]-=a[r][k]*a[k][i];
}
for(i=r+1;i {
for(k=0;k a[i][r]-=a[i][k]*a[k][r];
a[i][r]/=a[r][r];
}
}
for(i=0;i t[i]=a[i][N];
for(i=N-1;i>=0;i--)     //利用回代法求最终解
{
for(r=N-1;r>i;r--)
t[i]-=a[i][r]*x[r];
x[i]=t[i]/a[i][i];
}
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       2632  2010-12-18 12:38  列主元LU分解_数组法.cpp

----------- ---------  ---------- -----  ----

                 2632                    1


评论

共有 条评论