迭代法解线性方程组

    科技2022-08-18  107

    #include <map> #include <queue> #include <string> #include<iostream> #include<stdio.h> #include<string.h> #include <algorithm> #include <math.h> typedef long long ll; typedef unsigned long long ull; using namespace std; typedef pair<ll,ll> pii; #define mem(a,x) memset(a,x,sizeof(a)) #define debug(x) cout << #x << ": " << x << endl; #define rep(i,n) for(int i=0;i<(n);++i) #define repi(i,a,b) for(int i=int(a);i<=(b);++i) #define repr(i,b,a) for(int i=int(b);i>=(a);--i) const int maxn=1e7+1; #define inf 0x3f3f3f3f #define sf scanf #define pf printf #define EPS 1e-3 #define MAX 100 const int mod=998244353; const int MOD=10007; ll n; double a[100][100]; double b[maxn],x_k[maxn],x_k1[maxn]; #define read read() int main(){ cin>>n; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ cin>>a[i][j]; } } for(int i=1;i<=n;i++) { cin>>b[i]; x_k[i]=x_k1[i]=0; } int i,j,k=0; double sum,epsilon; ll flag=0; while(1) { epsilon=0.0; k=k+1; for(int i=1;i<=n;i++){ sum=0; for(int j=1;j<=n;j++){ if(j!=i) sum+=a[i][j]*x_k[j]; } x_k1[i]=(b[i]-sum)*1.0/a[i][i]; epsilon+=fabs(x_k1[i]-x_k[i]); } for(int i=1;i<=n;i++) x_k[i]=x_k1[i]; if(epsilon < EPS) { flag=1; break; } if(k>=MAX){ flag=0; break; } } if(flag){ for(int i=1;i<=n;i++) cout<<x_k[i]<<" "; }else { cout<<"无解"<<endl; } return 0; }
    Processed: 0.009, SQL: 9