手机版

高斯列主元消去法解线性方程组

发布时间:2024-11-21   来源:未知    
字号:

C++编写

高斯列主元消去法解线性方程组

作者:刘俊 班级B0503791 软件学院 学号1050379016

试验原理:

1. 高斯消去法是一个古老的求解线性方程组的方法,但它的改进、变形得到的主元素

消去法仍然是计算机上常用的计算方法。

2. 列主元消去法

a. 构造增广矩阵

设系数矩阵为

a11 A= a n1 a1n ann

设增广矩阵为

a11 a21 B=

an1 a1na2n|| | annb1 b2 bn

b.找到每列的绝对值的最大的数

c.行变换(重复b-c)

d.消去

mik aik(k)/akk

(k)(k),(k 1,2, ,n); (k)aij

bi(k 1) aijk mikakj(k),(i,j k 1, ,n); (k 1) bi mikb,(i k 1, ,n);

e. 回代

Xn bn(n)/ann(n);

(k)n

Xk (bk(k)

j k 1akjxj)/akk(k);

C++编写

实验过程:

#include<stdio.h>

#include<conio.h>

#include<math.h>

#define N 100

#define epsilon 1e-6

float a[N][N+1];

void main( )

{

int i,j,k,n;

float t,s=0;

printf("Input juzhen jieshu:");

scanf("%d",&n);

printf("\n");

for(i=0;i<n;i++)

{

printf("\n\n请输入a%d1--a%d%d系数和向量b%d:",i+1,i+1,n,i+1);

/*实现将每一行中的系数和向量一次性输入,数之间用空格格开,输完后回车确定*/

for(j=0;j<n+1;j++) /*将刚才输入的数存入数组*/

scanf("%f",&a[i][j]);

}

/*交换两列*/

for(k=0;k<n-1;k++)

{

for(i=k+1;i<n;i++)

if( abs(a[i][k]) > abs(a[k][k]) )

for(j=k;j<n+1;j++)

{

t=a[k][j];

a[k][j]=a[i][j];

a[i][j]=t;

}

if( abs(a[k][k]) < epsilon)

{

printf("\nError,zhuyuan xiaoqufa cann\'t be durable,break at %d!\n",k+1);

return;

}

for(i=k+1;i<n;i++)

{

a[i][k]=a[i][k] / a[k][k];

for(j=k+1;j<n+1;j++)

C++编写

a[i][j]=a[i][j]-a[i][k] * a[k][j]; }

}

a[n-1][n]=a[n-1][n] / a[n-1][n-1];

for(k=n-2;k>=0;k--)

{

s=0;

for(j=k+1;j<n;j++)

s+=a[k][j]*a[j][n];

a[k][n]=( a[k][n]-s ) / a[k][k]; }

printf("\n*****The Result*****\n"); for(i=0;i<n;i++)

printf(" x[%d]=%.4f\n",i+1,a[i][n]); getch( );

}

实验结果:

-2.000 1.072 5.643 6.564

0.000 3.569 1.868 0.269

0.001 6.232 1.368 0.698

解得:

x1=-3.5527

x2=0.1394

x3=-0.1224

代入原方程,与结果非常吻合。

由此可见,高斯列主元消去法精度很高,是一种好方法。

高斯列主元消去法解线性方程组.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
    ×
    二维码
    × 游客快捷下载通道(下载后可以自由复制和排版)
    VIP包月下载
    特价:29 元/月 原价:99元
    低至 0.3 元/份 每月下载150
    全站内容免费自由复制
    VIP包月下载
    特价:29 元/月 原价:99元
    低至 0.3 元/份 每月下载150
    全站内容免费自由复制
    注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
    × 常见问题(客服时间:周一到周五 9:30-18:00)