1 / 23

IT 入門 B2

IT 入門 B2. ー 連立一次方程式 ー. 授 業 内 容. 行列,ベクトルの表現法と行列の演算 連立一次方程式の解法 ガウスの消去法 具体例 前進消去 後退代入 ピボット選択 演習. 行列,ベクトルの表現法. C 言語で,行列やベクトルを表現するには? ベクトル:配列の利用 double x[N]; ⇒ x[0] ~ x[N-1] の N 個の要素を確保 行列: 2 次元配列の利用 double a[N][N]; ⇒ a[0][0], a[0][1], … , a[0][N-1],

inga-sims
Download Presentation

IT 入門 B2

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. IT入門B2 ー 連立一次方程式 ー

  2. 授 業 内 容 • 行列,ベクトルの表現法と行列の演算 • 連立一次方程式の解法 • ガウスの消去法 • 具体例 • 前進消去 • 後退代入 • ピボット選択 • 演習

  3. 行列,ベクトルの表現法 C言語で,行列やベクトルを表現するには? • ベクトル:配列の利用 double x[N]; ⇒ x[0]~x[N-1]のN個の要素を確保 • 行列:2次元配列の利用 double a[N][N]; ⇒ a[0][0], a[0][1], … , a[0][N-1], a[1][0], a[1][1], … , a[1][N-1], …… a[N-1][0], a[N-1][1], … , a[N-1][N-1] の(N×N)個の要素を確保

  4. 行列,ベクトルの表現 #include <stdio.h> int main(void) { int i, j; double x[3] = {-33.0, 9.0, 6.0}; double a[3][3] = {{2.0, 4.0, 6.0}, {3.0, 8.0, 7.0}, {5.0, 7.0, 21.0}}; printf("x = \n"); for (i=0; i<3; i++) { printf("%6.2f\n", x[i]); } printf("a = \n"); for (i=0; i<3; i++) { for (j=0; j<3; j++) { printf(" %.2f", a[i][j]); } printf("\n"); } return 0; }

  5. 行列の演算 n×n行列A とn次元ベクトルx の積を計算するプログラムを作ってみよう. 計算結果をn次元ベクトルy に代入することにすると, これを具体的に記述すると,

  6. ベクトルy の各成分は と記述できる. ベクトルy の計算 for(i = 0; i < n; i++){ の計算 }

  7. 各成分の計算: 各項 (j =0,1,…,n-1)の総和を計算する. 成分の計算 y[i] = 0.0; for(j = 0; j < n; j++){ y[i] += a[i][j]*x[j]; } y[i] += a[i][j]*x[j]; は y[i] = y[i] + a[i][j]*x[j]; と同じ意味.

  8. まとめると,行列A とベクトルx の積y を計算するプログラムは以下のようにして実現できる: ベクトルy の計算 for(i = 0; i < n; i++){ y[i] = 0.0; for(j = 0; j < n; j++){ y[i] += a[i][j]*x[j]; } }

  9. 演 習 以下の行列A とベクトルx の積( )を計算するプログラムを作ってみよう: 

  10. 連立一次方程式の解法 • 直接解法 • ガウスの消去法 • LU分解法 … • 反復解法 • ヤコビ法 • ガウス・ザイデル法 … ガウスの消去法を用いて連立一次方程式の解を計算する プログラムを作成しよう

  11. ガウスの消去法 まず,具体例として3元連立方程式 を解くことを考えよう.

  12. ② ③ ① ②’ ③ ① ②’ ③’ [第1列消去] ②,③からxを消去: ②-①×3/2 ③-①×5/2

  13. ②’ ③’ ① ②’ ③” [第2列消去] ③’からyを消去: ③’-②’×(-3/2) 各列の係数を順次消去していく:前進消去

  14. ②’ ③” ③”から z = 6 zの値を②’に代入し y = 9 y, zの値を①に代入し x=-33 求まった変数の値を順次代入しながら 解を計算する:後退代入

  15. ガウスの消去法 前進消去と後退代入の組み合わせにより連立一次方程式の 解を求める手法 以下,連立一次方程式 の解を計算するプログラムを作成することを目標とする.

  16. 前進消去のプログラムでの実現 に対し,第0列消去,第1列消去,… と繰り返し, 同じ解を持つ以下の方程式へと変形する:

  17. 前進消去のプログラムでの実現 に対し,第k列消去を,k = 0, 1, 2, … , (n-2) について 繰り返し行えばよい. 前進消去 for(k=0; k<=n-2; k++){ 第k列消去 }

  18. 前進消去のプログラムでの実現 [第k列消去]

  19. [第k列消去]

  20. for (i=k+1; i<=n-1; i++) { r = a[i][k]/a[k][k]; for (j=k+1; j<=n-1; j++) { a[i][j] = a[i][j] – a[k][j]*r; } b[i] = b[i] – b[k]*r; } [第k列消去] 第k列消去

  21. 後退代入のプログラムでの実現 第(n-1)行: 第(n-2)行: 第i 行:

  22. 後退代入のプログラムでの実現 for (i=n-1; i>=0; i--) { } 考えてみよう

  23. 演 習 ガウスの消去法を実現するプログラムを完成させて,下記の連立一次方程式の解を計算してみよう: ただし

More Related