1. 程式人生 > >數值分析中的高斯—塞德爾迭代演算法

數值分析中的高斯—塞德爾迭代演算法

本例是用java語言實現的,適合於學習數值分析課程的同學借鑑;

package c;

import java.util.Scanner;

public class Demo {

    public static void main(String []args)
    {
        boolean flag = true;
         int N,n,t = 0;    //N迭代次數,n指是x的下標
         double e = 0;
         double [][] X = new double[30][30];
         double b[] = new
double[30]; double a[][] = new double[30][30]; Scanner in = new Scanner(System.in); System.out.print("請輸入初始值x的個數:"); n = in.nextInt(); System.out.print("請輸入迭代次數:"); N = in.nextInt(); System.out.print("請輸入精度值(0.00....1)"); e = in.nextDouble(); for
(int i = 1;i<=n;i++) { System.out.print("b["+i+"]="); b[i] = in.nextDouble(); } System.out.println("請輸入x的初始值"); for(int i = 1;i<=n;i++) { System.out.print("X["+i+"][0]="); X[i][0] = in.nextDouble(); } System.out
.println("請輸入對應的a值"); for(int i = 1;i<=n;i++) for(int j = 1;j<=n;j++) { System.out.print("a["+i+"]["+j+"] = "); a[i][j] = in.nextDouble(); } while(t<N) { for(int i = 1;i<=n;i++) { double f1 = 0; for(int j = 1;j<=n;j++) { if(j!=i) f1 += a[i][j]*X[j][t]; } X[i][t+1] = (b[i]-f1)/a[i][i]; double f2 = 0; double f3 = 0; for(int m = 1;m<=i-1;m++) { f2 += a[i][m]*X[m][t+1]; } for(int m = i+1;m<=n;m++) { f3 += a[i][m]*X[m][t]; } X[i][t+1] = (b[i]-f2-f3)/a[i][i]; System.out.printf("X["+i+"]["+(t+1)+"] = %.5f",X[i][t+1]); System.out.print(" "); } System.out.println(); for(int i = 1;i<=n;i++) { if(Math.abs(X[i][t+1]-X[i][t])<e) { for(int j = 1;j<=n;j++) System.out.printf("X["+j+"]["+(t+1)+"] = %.5f",X[j][t+1]); flag = false; break; } } if(flag == true) t++; else break; } //end of while if(t==N) System.out.println("迭代次數不夠或失敗,未達到指定精度!"); } }