雅可比迭代和高斯賽德爾迭代


image

image

image

image

image

image

 

 

 

 

     算法偽代碼如下,有錯誤的話請給我指出來:

 

//假設所有a[i][i]都不是0,為0的話還不知道怎么辦
		輸入系數於數組a[][];
		輸入常數於數組b[];
		
		//計算新系數於數組c[][]
		for(int i=0; i<n; i++) {
			c[i][n-1] = b[i]/a[i][i];
		}
		//不是n-1行,經過商議不處理,只是列數減1
		for(int i=0; i<n; i++) {
			for(int j=0; j<n-1; j++) {
				if(i<j)
					c[i][j] = -a[i][j+1]/a[i][i];
				else if(i>j)
					c[i][j] = -a[i][j]/a[i][i];
				else
					continue;
			}
		}	
		//迭代100次,自己加上精度判斷吧
		//從向量形式可以看出,初試解為全0的話第一次解為c[i][n-1],如果為了省着一次時間的話可以先把
		//這個復制給解數組 root[],再仔細看看會發現每次迭代的話都需要加上c[i][n-1]
		while(T--) {
			//k行
			for(int j=0; j<n; j++) {
				//n-1列,最后的c[i][n-1]到最后加上
				int temp = 0;
				for(int k=0; k<n-1; k++) {
					if(j>k)
						temp += c[j][k]*root[k];
					else if(j<k)
						temp += c[j][k]*root[k+1];
					else
						continue;
				}
				//再仔細看看會發現每次迭代的話都需要加上c[i][n-1]
				root[j] += temp;
				
			}
		}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM