1 / 17

帯行列の計算

帯行列の計算. 2013 年 9 月 19 日 後 保範. 帯行列の三角分解. 0. 0. 0. 0. =. ・. 0. 0. 0. 0. A. U T. U. 規則的疎行列. 半帯の中が非ゼロになる. スカイライン行列との関係. 帯幅の位置まで広げる. 有限要 素法. 不規則疎行列. 不規則疎行列. 帯行列. 対称正定値 行列の発生. 有限要素法で離散化. 対称正定置帯行列. 軸交換なし、上半分で分解. 対称正定値帯行列. 消去対象. この部分 だけ 計算. 対称帯行列 の消去. W にコピー. j. k.

mort
Download Presentation

帯行列の計算

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 帯行列の計算 2013年9月19日 後 保範

  2. 帯行列の三角分解 0 0 0 0 = ・ 0 0 0 0 A UT U 規則的疎行列 半帯の中が非ゼロになる

  3. スカイライン行列との関係 帯幅の位置まで広げる 有限要 素法 不規則疎行列 不規則疎行列 帯行列

  4. 対称正定値行列の発生 有限要素法で離散化 対称正定置帯行列 軸交換なし、上半分で分解

  5. 対称正定値帯行列 消去対象 この部分 だけ計算

  6. 対称帯行列の消去 Wにコピー j k A[i][j-i] -= T*W[j] i T = A[i][i-k]/A[k][0] 消去計算 0 <= k <n k< i <=k+m, i<= j <i+m

  7. 対称帯行列の消去計算 for (k=0; k<n; k++) { bend = Math.min(k+m, n-1); for (j=k+1; j<=bend; j++) { W[j] = A[k][j-k]; } for (i=k+1; i<=bend; i++) { T = A[k][i-k] / A[k][0]; for (j=i; j<=bend; j++) { A[i][j-i] -= T*W[j]; } } }

  8. 対称帯行列の前進後退代入 for (k=0; k<n; k++) { BK = B[k][0]; bend = Math.min(k+m,n-1) for (i=k+1; i<=bend; i++) { B[i] -= BK*A[k][i-k]; } } for (k=n-1; k>=0; k--) { S = B[k]; bend = Math.min(k+m,n-1); for (j=k+1; j<=bend; j++) { S -= B[j]*A[k][j-k]; } B[k] = S / A[k][0]; }

  9. 非対称行列の発生 有限要素法で離散化 非対称帯行列 軸交換有り、半幅拡大して分解

  10. 非対称帯行列 軸交換により この部分が 増える 消去対象

  11. 非対称帯行列の軸交換 A[k][j-k+m] k 交換 A[ip][j-IPK+m] IPK コピー W[j] |A[ip][k-IPK+m]|  が最大値

  12. 非対称帯行列の消去 A[i][j-i+m] -=T*W[j] j k i 消去計算 T=A[i][k-i+m]/A[k][m]

  13. 非対称帯行列の消去計算1(全体) for (k=0; k<n; k++) { 軸交換処理(最大値探査と軸交換) if (最大値 > ε) { 消去計算 } else { 特異行列と判定 } }

  14. 消去計算2(軸交換) AMAX = Math.abs(A[k][m]); IPK = Math.abs(A[k][m]); for (i=k+1; i<= Math.min(k+m,n-1); i++) { AIK = Math.abs(A[i][k-i+m]); if ( AIK > AMAX) { IPk = i; AMAX = AIK; } } IP[k] = IPK; for (j=k; j <= Math,min(k+2*m,n-1); j++) { W[j] = A[IPK][j-IPK+m]; A[IPK][j-IPK+m] = A[k][j-k+m]; A[k][j-k+m] = W[j]; }

  15. 消去計算3(消去計算) for (i=k+1; i <= Math.min(k+m,n-1); i++) { T = A[i][k-i+m] / A[k][m]; A[i][k-i+m] = T; for (j=k+1; j <= Math.min(k+2*m,n-1; j++) { A[i][j-i+m] -= T*W[j]; } }

  16. 非対称帯行列の前進代入 for (k=0; k<n; k++) { IPK = IP[k]; if ( IPK != k) { WK = B[IPK]; B[IPK]= B[k]; B[k]=W; } for (i=k+1; Math.min(k+m,n-1); i++) { B[i] -= B[k]*A[i][k-i+m]; } }

  17. 非対称帯行列の後退代入 for (k=n-1; k >= 0; k--) { S = B[k]; for (j=k+1; j<= Math.min(k+2*m,n-1); j++) { S -= B[j]*A[k][j-k+m]; } B[k] = S / A[k][m]; }

More Related