Presentation is loading. Please wait.

Presentation is loading. Please wait.

IT入門B2 ー 連立一次方程式 ー.

Similar presentations


Presentation on theme: "IT入門B2 ー 連立一次方程式 ー."— Presentation transcript:

1 IT入門B2 ー 連立一次方程式 ー

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

3 行列,ベクトルの表現法 C言語で,行列やベクトルを表現するには? ベクトル:配列の利用 double x[N];
 行列,ベクトルの表現法  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×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;
各成分 の計算: 各項 ( 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 を計算するプログラムは以下のようにして実現できる:
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分解法 … 反復解法 ヤコビ法 ガウス・ザイデル法
 連立一次方程式の解法  直接解法 ガウスの消去法 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 [第k列消去] 第k列消去 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;

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

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

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


Download ppt "IT入門B2 ー 連立一次方程式 ー."

Similar presentations


Ads by Google