太原理工大学数值计算方法实验报告
心得体会
使用不同的方法,可以不同程度的求得方程的解,通过二分法计算的程序实现更加了解二分法的特点,二分法过程简单,程序容易实现,但该方法收敛比较慢一般用于求根的初始近似值,不同的方法速度不同。面对一个复杂的问题,要学会简化处理步骤,分步骤一点一点的循序处理,只有这样,才能高效的解决一个复杂问题。
实验名称
实验二 线性方程组的直接求解
实验内容和要求
合理选择利用Gauss消元法、主元素消元法、LU分解法、追赶法求解下列方程组:
(1)了解线性方程组常见的直接解法,如Guass消元法、LU分解法、追赶法。
(2)加深对线性方程组求解方法的认识,掌握算法。
(3)会进行误差分析,并能对不同方法进行比较。
实验原理
1. 高斯分解法:
⑴将原方程组化为三角形方阵的方程组:
lik=aik/akk
aij= aij- lik* akj k=1,2,…,n-1
i=k+1,k+2, …,n j=k+1,k+2, …,n+1
⑵由回代过程求得原方程组的解:
xn= ann+1/ ann
xk=( akn+1-∑akj xj)/ akk (k=n-1,n-2, …,2,1)
2. LU分解法:
将系数矩阵A转化为A=L*U, L为单位下三角矩阵,U为普通上三角矩阵,然后通过解方程组l*y=b,u*x=y,来求解x.
主要仪器设备
HP计算机
实验记录
:
#include ""
#include ""
#include <>
double a[5][6],a0[5][6];
double l[5],tmp;
void Exchange(int i)
{
int j,l,k;
double max=a0[i][i],temp;
j=i;
for(k=i;k<=3;k++)
{
if(a0[k][i]>max)
{
max=a0[k][i];
j=k;
}
}
for(l=i;l<=4;l++)
{
temp=a0[i][l];
a0[i][l]=a0[j][l];
a0[j][l]=temp;
}
for(i=1;i<=3;i++)
{
for(j=1;j<=4;j++)
{
a[i][j]=a0[i][j];
}
}
}
void displayA()
{
int i,j;printf("\n");
for(j=1;j<=3;j++)
{
for(i=1;i<=4;i++)
printf("%lf ",a[j][i]);
printf("\n");
}
}
void main()
{
int i,j,k;
for(i=1;i<=3;i++)
{
for(j=1;j<=4;j++)
{ scanf("%lf",&a[i][j]);
a0[i][j]=a[i][j];
}
}
displayA(); printf("列主元素消元法如下");
//消元过程
k=1;
do
{
Exchange(k);
displayA();
for(i=k+1;i<=3;i++)
{
l[i]=a0[i][k]/a0[k][k];
printf("l[%i][%i]=%lf",i,k,l[i]);
for(j=k;j<=4;j++)
{
a[i][j]=a0[i][j]-l[i]*a0[k][j];
}
displayA();
}
k++;
if(k==3) break;
for(j=1;j<=3;j++)
{
for(i=1;i<=4;i++)
a0[j][i]=a[j][i];
}
}while(1);
//回代过程
l[3]=a[3][4]/a[3][3];
for(k=3;k>=1;k-
太原理工大学数值计算方法实验报告 来自淘豆网m.daumloan.com转载请标明出处.