Download presentation
Presentation is loading. Please wait.
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
演 習 ガウスの消去法を実現するプログラムを完成させて,下記の連立一次方程式の解を計算してみよう: ただし
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.