列主元素消去法 一、实验要求
1、编程实现用列主元素消去法求解方程组
二、实验目的
1、进一步了解如何求解方程组
2、熟悉关于C语言的一些基本编程操作
三、实验内容
1、用列主元素消去法求解线性方程:
#include
#include
#define N 20
using namespace std;
void load();
float a[N][N];
int m;
int main(){
int i,j;
int c,k,n,p,r;
float x[N],l[N][N],s,d;
cout
cin>>m;
cout
cout
load();
for(i=0;i
{
for(j=i;j
c=(fabs(a[j][i])>fabs(a[i][i]))?j:i; /*找列最大元素*/ for(n=0;n
{s=a[i][n]; a[i][n]=a[c][n]; a[c][n]=s;} /*将列最大数防在对角线上*/ for(p=0;p
coutcout
for(k=i+1;k
{
l[k][i]=a[k][i]/a[i][i];
for(r=i;r
a[k][r]=a[k][r]-l[k][i]*a[i][r];
}
}
x[m-1]=a[m-1][m]/a[m-1][m-1];
for(i=m-2;i>=0;i--)
{
d=0;
for(j=i+1;j
d=d+a[i][j]*x[j];
x[i]=(a[i][m]-d)/a[i][i];
}
cout
for(i=0;i
cout
//system("pause");
return 0;
}
void load()
{
int i,j;
for(i=0;i
for(j=0;j
cin>>a[i][j];
} /*求解*/
2、LU分解法
#include
void solve(float l[][100],float u[][100],float b[],float x[],int n)
{int i,j;
float t,s1,s2;
float y[100];
for(i=1;i
{s1=0;
for(j=1;j
{
t=-l[i][j];
s1=s1+t*y[j];
}
y[i]=(b[i]+s1)/l[i][i]; }
for(i=n;i>=1;i--) /* 第二次回代过程开始 */
{
s2=0;
for(j=n;j>i;j--)
{
t=-u[i][j];
s2=s2+t*x[j];
}
x[i]=(y[i]+s2)/u[i][i];
}
}
void main()
{float a[100][100],l[100][100],u[100][100],x[100],b[100];
int i,j,n,r,k;
float s1,s2;
for(i=1;i
{
l[i][j]=0,u[i][j]=0;
if(j==i) l[i][j]=1;
}
printf ("input n:\n");/*输入方程组的个数*/
scanf("%d",&n);
printf ("input array A:\n");/*读取原矩阵A*/
for(i=1;i
for(j=1;j
scanf("%f",&a[i][j]);
printf ("input array B:\n");/*读取列矩阵B*/
for(i=1;i
scanf("%f",&b[i]);
for(r=1;r
{
for(i=r;i
{
s1=0;
for(k=1;k
s1=s1+l[r][k]*u[k][i];
u[r][i]=a[r][i]-s1;
}
for(i=r+1;i
{s2=0;
for(k=1;k
s2=s2+l[i][k]*u[k][r];
l[i][r]=(a[i][r]-s2)/u[r][r];
} }
列主元素消去法 一、实验要求
1、编程实现用列主元素消去法求解方程组
二、实验目的
1、进一步了解如何求解方程组
2、熟悉关于C语言的一些基本编程操作
三、实验内容
1、用列主元素消去法求解线性方程:
#include
#include
#define N 20
using namespace std;
void load();
float a[N][N];
int m;
int main(){
int i,j;
int c,k,n,p,r;
float x[N],l[N][N],s,d;
cout
cin>>m;
cout
cout
load();
for(i=0;i
{
for(j=i;j
c=(fabs(a[j][i])>fabs(a[i][i]))?j:i; /*找列最大元素*/ for(n=0;n
{s=a[i][n]; a[i][n]=a[c][n]; a[c][n]=s;} /*将列最大数防在对角线上*/ for(p=0;p
coutcout
for(k=i+1;k
{
l[k][i]=a[k][i]/a[i][i];
for(r=i;r
a[k][r]=a[k][r]-l[k][i]*a[i][r];
}
}
x[m-1]=a[m-1][m]/a[m-1][m-1];
for(i=m-2;i>=0;i--)
{
d=0;
for(j=i+1;j
d=d+a[i][j]*x[j];
x[i]=(a[i][m]-d)/a[i][i];
}
cout
for(i=0;i
cout
//system("pause");
return 0;
}
void load()
{
int i,j;
for(i=0;i
for(j=0;j
cin>>a[i][j];
} /*求解*/
2、LU分解法
#include
void solve(float l[][100],float u[][100],float b[],float x[],int n)
{int i,j;
float t,s1,s2;
float y[100];
for(i=1;i
{s1=0;
for(j=1;j
{
t=-l[i][j];
s1=s1+t*y[j];
}
y[i]=(b[i]+s1)/l[i][i]; }
for(i=n;i>=1;i--) /* 第二次回代过程开始 */
{
s2=0;
for(j=n;j>i;j--)
{
t=-u[i][j];
s2=s2+t*x[j];
}
x[i]=(y[i]+s2)/u[i][i];
}
}
void main()
{float a[100][100],l[100][100],u[100][100],x[100],b[100];
int i,j,n,r,k;
float s1,s2;
for(i=1;i
{
l[i][j]=0,u[i][j]=0;
if(j==i) l[i][j]=1;
}
printf ("input n:\n");/*输入方程组的个数*/
scanf("%d",&n);
printf ("input array A:\n");/*读取原矩阵A*/
for(i=1;i
for(j=1;j
scanf("%f",&a[i][j]);
printf ("input array B:\n");/*读取列矩阵B*/
for(i=1;i
scanf("%f",&b[i]);
for(r=1;r
{
for(i=r;i
{
s1=0;
for(k=1;k
s1=s1+l[r][k]*u[k][i];
u[r][i]=a[r][i]-s1;
}
for(i=r+1;i
{s2=0;
for(k=1;k
s2=s2+l[i][k]*u[k][r];
l[i][r]=(a[i][r]-s2)/u[r][r];
} }