数值分析c语言实现高斯赛德尔解法.docVIP

  • 9
  • 0
  • 约1.86千字
  • 约 6页
  • 2018-02-06 发布于河南
  • 举报
数值分析c语言实现高斯赛德尔解法

数值分析 程 序 设 计 学院:计算机学院 姓名:袁薪洋 实验目的: 1熟练掌握C语言程序设计,编程求解问题。 2.运用高斯-赛德尔迭代公式求解线性方程组。 实验内容: 用高斯-赛德尔迭代公式求解方程组。 10x1-x2-2x3=7.2 -x1+10x2-2x3=8.3 -x1-x2+5x3=4.2 程序的核心代码: #includemath.h #includestdio.h #define NUMBER 20 float A[NUMBER][NUMBER+1] ; float ark; int flag,n; void exchange(int r,int k); float max(int k); void main() { float x[NUMBER]; /*此数组用于存放方程解*/ int r,k,i,j; printf(***********************************); printf(\n\n用高斯-赛德尔迭代法解线性方程组\n\n); printf(***********************************); printf(\n\n 请输入方程组的维数:n=); scanf(%d,n); printf( \n\n请输入系数矩阵A和向量b:); for(i=1;i=n;i++) { printf(\n\n请输入a%d1--a%d%d系数和向量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\n此方程组不合法!); } 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]); } } 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; } 运行结果: 截图如下:

文档评论(0)

1亿VIP精品文档

相关文档