Gauss_Seidel

来源:互联网 发布:网络与新媒体真的好吗 编辑:程序博客网 时间:2024/06/06 04:14
#include<stdio.h>#include<math.h>float cal(float X[],float A[10][10],int i,int s,int n){int j;float sum=0;for(j=s;j<=n;++j)sum=sum+A[i][j]*X[j];return sum; }float jacobi(int n,int N,float A[10][10],float B[10],float flag,float X[10]){int k=1,i,j,l;float Xi[10],temp[10];for(i=1;i<=n;++i)temp[i]=X[i];printf("k    ");for(l=1;l<=n;++l)printf("X%d      ",l);printf("\n");while(k<=N){printf("%d ",k-1);for(l=1;l<=n;++l){printf("%f ",X[l]);}printf("\n");for(i=1;i<=n;++i){Xi[i]=(-cal(temp,A,i,1,i-1)-cal(temp,A,i,i+1,n)+B[i])/A[i][i];temp[i]=Xi[i];}for(j=1;j<=n;++j){if(fabs(Xi[j]-X[j])<flag){return 1;}}k++;for(j=1;j<=n;++j){X[j]=Xi[j];}}return 0;}int main(){int i,j,n,N;float A[10][10],B[10],flag,X[10];printf("方程组的未知个数n;系数矩阵A;常数项b;初始值X;精度要求flag;最大迭代次数N.");scanf("%d",&n);//////////////for(i=0;i<n;i++)for(j=0;j<n;j++)scanf("%f",&A[i+1][j+1]);for(i=1;i<=n;++i)scanf("%f",&B[i]);for(i=1;i<=n;++i)scanf("%f",&X[i]);scanf("%f",&flag);scanf("%d",&N);if(jacobi(n,N,A,B,flag,X)){printf("The anser:\n");for(i=1;i<=n;++i)printf("%f ",X[i]);}elseprintf("error!\n");printf("\n");return 0;}

原创粉丝点击