列主元素消去法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2012-2013(1)专业课程实践论文
列主元素消去法
范 宁:0818180102,R 数学08-1班
夏之秋:0818180110,R 数学08-1班
一、算法理论
列主元素消去法既是选主元高斯消去法的一种,也是实际计算中常用的部分选主元消去法。
列主元素消去法则是对完全主元素消去法的又一次改进。
列主元素消去法在完全主元素消去法的基础上减少了在选主元素时所要花费的一定的计算时间。
设有线性方程组
其中,A 为非奇异矩阵。
方程组的增广矩阵为
首先在A 的第1列选取绝对值最大的元素作为主元素,即选择
然后交换A 的第1行及第1i 行(交换后增广矩阵为简单起见仍
记为]b ,[A ,其元素仍记为i j i b a ,)。
经过第1次消元计算得到及
原方程组等价的方程组
其中
上述过程可记为 ]2[)2()2(]b ,[]b ,[A A →
重复上述计算过程,现假设已完成第1-k 步的选主元素过程,交换两行并进行消元计
此时]b ,[A 约化为
其中)(k A 的元素仍记为j i a ,)(b k 的元素仍记为i b .
第k 步选主元素(在)(k A 右下角方阵的第1列内选),即确定k i ,
使 0max ,≠=≤≤ik n i k k i a a k
交换]b ,[)()(k K A 第k 行及)1,,2,1(-=n k i k 行的元素,再进行消元计算,最后将原线性方程组化为
回代可求解得 ⎪⎩⎪⎨⎧-=-==∑+=)1,2,,1(/)(/1 n i a x a b x a b x ii
n i j j ij i i nn
n n
二、算法框图
三、算法程序
#include <stdio.h>
#include<conio.h>
#include <math.h>
#include <stdlib.h>
#define max_dimension 20
int n;
static float a[max_dimension][max_dimension]; static float b[max_dimension];
static float x[max_dimension];
void main()
int i;
int j;
int d;
int row;
float temp;
float known_items;
float l[max_dimension][max_dimension]; system("cls");
printf("Please Input Matrix jieshu :");
scanf("%d",&n);
printf("\n");
printf("Please Input Matrix Factors : ");
printf("\n");
for (i=0; i<n; i++)
printf("input di %d hang dezhi:",i+1);
for (j=0; j<n; j++)
scanf("%f",&a[i][j]);
printf("\n");
printf("Please Input Changshu xiang: ");
for (i=0; i<n; i++)
scanf("%f",&b[i]);
printf("The Augmented(zenguang) Matrix is :\n\n"); for (i=0; i<n; i++)
for (j=0; j<n; j++)
printf("%f",a[i][j]);
printf("%f",b[i]);
printf("\n");
printf("\n");
for (d=0; d<n-1;d++)
row=d;
for (i=d+1; i<n; i++)
if(fabs(a[i][d])>fabs(a[row][d]))
row=i;
if (row!=d)
for (j=d;j<n; j++)
temp=a[row][j];
a[row][j]=a[d][j];
a[d][j]=temp;
temp=b[row];
b[row]=b[d];
b[d]=temp;
for (i=d+1; i<n; i++)
l[i][d]=-a[i][d]/a[d][d];
for (j=d;j<n; j++)
a[i][j]=a[i][j]+a[d][j]*l[i][d];
b[i]=b[i]+b[d]*l[i][d];
printf("The shangsanjiaozenguang Matrix after predigestion is:\n\n");
for (i=0; i<n; i++)
for (j=0; j<n; j++)
printf("%f",a[i][j]);
printf("%f",b[i]);
printf("\n");
printf("\n");
for (i=n-1; i>-1; i--)
known_items=0;
for (j=1; j<n-i; j++)
known_items=known_items+a[i][i+j]*x[i+j];
x[i]=(b[i]-known_items)/a[i][i];
printf("The Root X is :\n\n");
for (i=0; i<n; i++)
printf("%.5f ",x[i]);
printf("\n\n");
getch();
四、算法实现
例1. 求解方程组:
用四位浮点数进行计算,精确解舍入到四位有效数字为
解:运行程序
(1)显示 Please Input Matrix jieshu:输入的值为3,回车。
(2)显示input di 1 hang dezhi:输入000
001
.2
.0,回车。
.3
000
(3)显示 input di 2 hang dezhi:输入623
.1
000
,回
712
.3
.4
车。
(4)显示 input di 3 hang dezhi :输入643.5072.1000
.2-,回
车。
(5)显示 Please Input Changshu xiang::输入000.3000.2000.1,回车。
(6)显示结果:
例2. 用列主元素消去法解该方程
解:运行程序
(1)显示出 Please Input Matrix jieshu :输入的值为4,回车。
(2)显示input di 1 hang dezhi :输入2943.03678.01234.04096
.0回车。
(3)显示 input di 2 hang dezhi :输入1129.04015.03872.02246.0回车。
(4)显示 input di 3 hang dezhi :输入0643.03781.01920.03645.0回车。
(5)显示 input di 4 hang dezhi :输入3927.02786.04002.01784.0回车。
(6)显示出 Please Input Changshu xiang::
输入,2557.04240.01550.04043
.0-回车。
(7)显示结果:。