当前位置:文档之家› 数值分析列主元消去法的实验报告

数值分析列主元消去法的实验报告

实验一 列主元消去法
【实验内容】
1.掌握列主元消去法的基本思路和迭代步骤
2.并能够利用列主元的高斯消去法解任意阶数的线性方程组;
3、从课后题中选一题进行验证,得出正确结果,交回实验报告与计算结果。

【实验方法与步骤】
1.列主元消去法基本思路
设有线性方程组Ax b =,设A 是可逆矩阵。

列主元消去法的基本思想就是通过列主元的选取将初等行变换作用于方程组的增广矩阵[]|B A b =,将其中的A 变换成一个上三角矩阵,然后求解这个三角形方程组。

2.列主元高斯消去法算法描述
将方程组用增广矩阵[]()(1)|ij n n B A b a ⨯+==表示。

步骤1:消元过程,对1,2,,1k n =-L
(1) 选主元,找{},1,,k i k k n ∈+L 使得
,max k i k ik k i n
a a ≤≤= (2) 如果,0k i k a =,则矩阵A 奇异,程序结束;否则执行(3);
(3) 如果k i k ≠,则交换第k 行与第k i 行对应元素位置,k kj i j a a ↔,
,,1j k n =+L ;
(4) 消元,对,,i k n =L ,计算/,ik ik kk l a a =对1,,1j k n =++L ,计算
.ij ij ik kj a a l a =-
步骤 2:回代过程:
(1) 若0,nn a =则矩阵奇异,程序结束;否则执行(2);
(2) ,1/;n n n nn x a a +=对1,,2,1i n =-L ,计算
,11/n i i n ij j ii j i x a a x a +=+⎛⎫=- ⎪⎝⎭

[实验程序]
#include<math.h>
#include<stdio.h>
#include<iostream>
#include<conio.h>
#define NUMBER 20
#define Esc 0x1b
#define Enter 0x0d
using namespace std;
float A[NUMBER][NUMBER+1] ,ark;
int flag,n;
void exchange(int r,int k);
float max(int k);
void message();
void main()
{
float x[NUMBER];
int r,k,i,j;
char celect;
void clrscr();
printf("\n\nUse Gauss.");
printf("\n\n1.Jie please press Enter.");
printf("\n\n2.Exit press Esc.");
celect=getch();
if(celect==Esc)
exit(0);
printf("\n\n input n=");
scanf("%d",&n);
printf(" \n\nInput matrix A and B:");
for(i=1;i<=n;i++)
{
printf("\n\nInput a%d1--a%d%d and b%d:",i,i,n,i);
for(j=1;j<=n+1;j++) scanf("%f",&A[i][j]); }
for(k=1;k<=n-1;k++)
{
ark=max(k);
if(ark==0)
{
printf("\n\nIt’s wrong!");message();
}
else if(flag!=k)
exchange(flag,k);
for(i=k+1;i<=n;i++)
for(j=k+1;j<=n+1;j++)
A[i][j]=A[i][j]-A[k][j]*A[i][k]/A[k][k]; }
x[n]=A[n][n+1]/A[n][n];
for( k=n-1;k>=1;k--)
{
float me=0;
for(j=k+1;j<=n;j++)
{
me=me+A[k][j]*x[j];
}
x[k]=(A[k][n+1]-me)/A[k][k];
}
for(i=1;i<=n;i++)
{
printf(" \n\nx%d=%f",i,x[i]);
}
message();
}
void exchange(int r,int k)
{
int i;
for(i=1;i<=n+1;i++)
A[0][i]=A[r][i];
for(i=1;i<=n+1;i++)
A[r][i]=A[k][i];
for(i=1;i<=n+1;i++)
A[k][i]=A[0][i];
}
float max(int k)
{
int i;
float temp=0;
for(i=k;i<=n;i++)
if(fabs(A[i][k])>temp)
{
temp=fabs(A[i][k]);
flag=i;
}
return temp;
}
void message() {
printf("\n\n Go on Enter ,Exit press Esc!"); switch(getch())
{
case Enter: main();
case Esc: exit(0);
default:{printf("\n\nInput error!");message();} }
}
【实验结果】。

相关主题