您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 数值分析-c语言实现高斯赛德尔解法
数值分析程序设计学院:计算机学院姓名:袁薪洋1.实验目的:1熟练掌握C语言程序设计,编程求解问题。2.运用高斯-赛德尔迭代公式求解线性方程组。2.实验内容:用高斯-赛德尔迭代公式求解方程组。10x1-x2-2x3=7.2-x1+10x2-2x3=8.3-x1-x2+5x3=4.2程序的核心代码:#includemath.h#includestdio.h#defineNUMBER20floatA[NUMBER][NUMBER+1];floatark;intflag,n;voidexchange(intr,intk);floatmax(intk);voidmain(){floatx[NUMBER];/*此数组用于存放方程解*/intr,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此方程组不合法!);}elseif(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--){floatme=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]);}}voidexchange(intr,intk)//交换行的矩函数{inti;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];}floatmax(intk)//比校系数大小的函数{inti;floattemp=0;for(i=k;i=n;i++)if(fabs(A[i][k])temp){temp=fabs(A[i][k]);flag=i;}returntemp;}3.运行结果:截图如下:
本文标题:数值分析-c语言实现高斯赛德尔解法
链接地址:https://www.777doc.com/doc-1730442 .html