1. 程式人生 > >雅可比(jacobi)迭代法,c語言實現

雅可比(jacobi)迭代法,c語言實現

#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <bits/stdc++.h>
using namespace std;
double A[1010][1010];
double B[1010];
double X[1010];
double X2[1010];
int main()
{
    //freopen("ceshi","r",stdin);  //檔案輸入;
    //freopen("b.txt","w",stdout); //檔案輸出;
    int n;
    printf("請輸入矩陣階數:\n");
    while(~scanf("%d",&n))
    {
        for(int i=1; i<=n; i++)    //輸入A矩陣;
        {
            printf("請輸入矩陣第%d行:\n",i);
            for(int j=1; j<=n; j++)
            {
                scanf("%lf",&A[i][j]);
            }
        }

        printf("請輸入行列式B:\n");
        for(int i=1; i<=n; i++) //輸入B行列式;
        {
            scanf("%lf",&B[i]);
        }
        memset(X,0,sizeof(X));
        memset(X2,0,sizeof(X));

        for(int i=0; i<13; i++) //雅可比迭代;
        {
            for(int j=1; j<=n; j++)
            {
                for(int k=1; k<=n; k++)
                {
                    if(j!=k)
                    {
                        X[j]+=(-1)*(A[j][k]/A[j][j])*X2[k];
                    }
                }
                X[j]+=B[j]/A[j][j];

            }
            printf("第%d次迭代結果\n",i+1);
            for(int j=1; j<=n; j++)
            {
                X2[j]=X[j];
                X[j]=0;
                printf("%.4f ",X2[j]);
            }
            printf("\n");
        }
        printf("請輸入下一個矩陣階數:\n");
    }

    return 0;
}