(毕业论文 字数:2378 页数:12 带程序)摘 要:本次C语言程序设计题目有二,分别是:列主元高斯消去法解线性方程组和用高斯—约当法求所给矩阵的逆。列主元高斯消去法解线性方程组要求此次C语言程序设计使我对C语言加深理解。
关键词 : C语言程序设计,列主元高斯消去法解线性方程组,高斯—约当法求所给矩阵的逆。
目录 摘要…………………………………………………………………1
关键词………………………………………………………………1
1 列主元高斯消去法解线性方程组……………………………2 程序要求……………………………………………………………4 算法简介……………………………………………………………2 流程图………………………………………………………………3 源程序………………………………………………………………4 运行结果……………………………………………………………4
2 用高斯—约当法求所给矩阵的逆……………………………5 程序要求……………………………………………………………5 算法简介……………………………………………………………5 流程图………………………………………………………………6 源程序………………………………………………………………8 运行结果……………………………………………………………8
总结…………………………………………………………………9
参考文献……………………………………………………………10
一.列主元高斯消去法解线性方程组: 程序要求:要求熟悉列主元高斯消去法,准确运用,判断方程是否有解,并且求出所给方程组的解。 算法简介: 给定线性方程组 . . … . 它的增广矩阵(a[i][j]) 列主元的高斯消去法的计算过程分为两步:消元和回代。 在消元之前对(a[j])k的第k列选取绝对值最大的元素ai0,k(k-1),即|ai0,k(k-1)|=max{|ai,k(k-1)|} 并且把第i0行与第K行互换,然后开始消元。 消元过程的公式为:
消元完成后,增广矩阵成为上三角矩阵,然后进行回代运算,运算过程如下: Xn=an,n=1 Xn=ak,n+1-∑kj(k)xi (k=n-1,n-2…1) 使用说明 整形变量,A[][]为实型二维数组,X[NUMBER] 用来存放解, 并且程序中还有两个用户自定义的两个函数exchange和max,运行输入矩阵阶数及方程的增广矩阵即可。 流程图: 源程序: #include <math.h> #include <stdio.h> #define NUMBER 20 float A[NUMBER][NUMBER+1] ,ark; int flag,n; exchange(int r,int k); float max(int k); main() { float x[NUMBER]; /*此数组用于存放方程解*/ int r,k,i,j; char celect; printf("Input the rank of matrix:"); /*输入矩阵的阶数*/ scanf("%d",&n); printf("Input Extended Matrix:"); for(i=1;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\nWrong!"); } 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]); } } 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 } 运行结果: Input the rank of Matrix: 2 Input Extend Matrix: 2 1 3 3 2 5 X1=1.00 X2=1.00
|