連立一次方程式 a11x1+a12x2+a13x3+...+a1nxn= b1

Slides:



Advertisements
Similar presentations
IT 入門 B2 ー 連立一次方程式( 2 ) ー. ガウスの消去法の問題点 – 浮動小数点数の特殊な値 – 数学関数 ピボット選択つきガウスの消去法 演習 授 業 内 容 授 業 内 容.
Advertisements

数値解析シラバス C言語環境と数値解析の概要(1 回) C言語環境と数値解析の概要(1 回) 方程式の根(1回) 方程式の根(1回) 連立一次方程式(2回) 連立一次方程式(2回) 補間と近似(2回) 補間と近似(2回) 数値積分(1回) 数値積分(1回) 中間試験(1回) 中間試験(1回) 常微分方程式(1回)
原子動力工学特論 課題2 交通電子機械工学専攻 2003310 齋藤 泰治.
配列の宣言 配列要素の初期値 配列の上限 メモリ領域 多次元配列 配列の応用
第6回条件による分岐.
数理情報工学演習第一C プログラミング演習 (第3回 ) 2014/04/21
プログラミング論 数値積分
4.3 連立1次方程式   Ax = b   (23) と書くことができる。
数個、数十個のデータ点から その特徴をつかむ
配列(2) 第10回[平成15年6月26日(木)]:PN03-10.ppt 今日の内容 1 素数を求める(教科書の例):復習
解析的には解が得られない 方程式を数値的に求める。 例:3次方程式
プログラミング論 I 行列の演算
基礎プログラミングおよび演習 第9回
連立一次方程式 a11x1+a12x2+a13x3+...+a1nxn= b1
原子動力工学特論 課題 3、4 交通電子機械工学専攻   齋藤 泰治.
P129 モンテカルロ シミュレーション 乱数を使ったシミュレーション.
常微分方程式と偏微分方程式 1.常微分方程式 独立変数が一個のもの 振動の運動方程式 2.偏微分方程式 独立変数が二個以上のもの
IT入門B2 ー 連立一次方程式 ー.
コンピュータープログラミング (C言語)(8) 1.乱数(復習) 2.配列とその利用
第二回 連立1次方程式の解法 内容 目標 連立1次方程式の掃出し法 初期基底を求める 連立1次方程式を掃出し法を用いてExcelで解析する
4.2 連立非線形方程式 (1)繰返し法による方法
数値解析シラバス C言語環境と数値解析の概要(1回) 方程式の根(1回) 連立一次方程式(2回) 補間と近似(2回) 数値積分(1回)
演習問題の答え #include #include #define NUM 5 typedef struct { // 構造体の定義 float shincho; // 身長 float taiju; // 体重 } shintai; void hyouji(shintai.
精密工学科プログラミング基礎Ⅱ 第3回資料 今回の授業で習得してほしいこと: 2次元配列の使い方 (前回の1次元配列の復習もします.)
第7回 条件による繰り返し.
C言語講座 第3回 ポインタ、配列.
ニュートン法の解の計算 情報電子工学系学科 電気電子工学コース・情報通信システム工学コース
プログラミング演習 バージョン1 担当教員:綴木 馴.
プログラムの制御構造 選択・繰り返し.
プログラミング2 関数
関数と配列とポインタ 1次元配列 2次元配列 配列を使って結果を返す 演習問題
数値積分.
フーリエ級数展開 ~矩形波について~ 長江 栞 中島 涼 中村 勇樹
傾きがわかった関数の軌跡を求める. 変数は二つ以上
木の走査.
プログラミング序論 2. n人のインディアン.
プログラミング演習I 行列計算と線形方程式の求解
LU分解を用いた連立一次方程式.
知能情報工学演習I 第12回(後半第6回) 課題の回答
第7回 条件による繰り返し.
第10回 FIR回路とIIR回路.
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
復習 前回の関数のまとめ(1) 関数はmain()関数または他の関数から呼び出されて実行される.
高度プログラミング演習 (05).
関数の再帰呼び出しとは ハノイの塔 リダイレクト レポート課題
第14章 ファイル操作 14.1 ファイルへの書き込み 14.2 ファイルからの読み込み 14.3 ファイルへの追加書き込み
FEM勉強会 (第3回).
配列変数とポインタ 静的確保と動的確保 ポインタ配列 2次元配列 時間計測 第1回レポートの課題
第14章 ファイル操作 14.1 ファイルへの書き込み 14.2 ファイルからの読み込み 14.3 ファイルへの追加書き込み
プログラミング序論演習.
プログラミング序論演習.
IF文 START もしも宝くじが当たったら 就職活動する 就職活動しない YES END NO.
復習 Cにおけるループからの脱出と制御 break ループを強制終了する.if文と組み合わせて利用するのが一般的. continue
変数を一度にたくさん宣言するよ! それだけじゃないよ!
ニュートン法による 非線型方程式の解.
ループだよ!難しいよ! 第5章 while(ループ);.
cp-3. 計算 (C プログラミング演習,Visual Studio 2019 対応)
Cプログラミング演習 ニュートン法による方程式の求解.
Cp-1. Microsoft Visual Studio 2019 C++ の使い方 (C プログラミング演習,Visual Studio 2019 対応) 金子邦彦.
知能情報工学演習I 第12回( C言語第6回) 課題の回答
四則演算,変数 入力文,出力文,代入文, ライブラリ関数
プログラミング入門2 第5回 配列 変数宣言、初期化について
第4回 配列.
第14章 ファイル操作 14.1 ファイルへの書き込み 14.2 ファイルからの読み込み 14.3 ファイルへの追加書き込み
C言語講座 四則演算  if ,  switch 制御文.
第5回 配列.
プログラミング演習I 補講用課題
第1章 文字の表示と計算 printfと演算子をやります 第1章 文字の表示と計算.
第1章 文字の表示と計算 printfと演算子をやります.
= 55 課題6-1 #define _CRT_SECURE_NO_WARNINGS
Presentation transcript:

連立一次方程式 a11x1+a12x2+a13x3+...+a1nxn= b1 a21x1+a22x2+a23x3+...+a2nxn= b2 . an1x1+an2x2+an3x3+...+annxn= bn

身近な連立一次方程式 -CTスキャン-

CTスキャンの原理 未知数 25個 検査領域

CTスキャンの原理 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14 A15 A16 A17 X線管 X線センサ 検査領域

CTスキャンの原理 A1+ A2 + A3 + A4 + A5 = 0 A6+ A7 + A8 + A9 + A10 = 3 検査領域

CTスキャンの原理 検査領域 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14 A15 A16 1 1 1 1 1 0 0 0 0 0 … 0 0 0 0 0 1 1 1 1 1 0 … 0 0 0 0 0 0 0 0 0 0 1 1 1 … A1 A2 A3 3 1 . A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14 A15 A16 A17 A18 A19 A20 A21 A22 A23 A24 A25 = (25×25)行列 … 0 0 0 0 0 1 1 1 1 1 A25 A25 検査領域

実際のスキャンニング X線センサ X線管

身近な連立一次方程式 -CTスキャン- (3000×3000)×(3000×3000)行列 (900万)×(900万)行列 0.1 mmなら 解像度が 0.1 mmなら 少なくとも (3000×3000)×(3000×3000)行列 300 mm (900万)×(900万)行列 300 mm

連立方程式の解法の利用 シミュレーション 応力変形解析 流体解析 熱解析 有限要素法 境界要素法 差分法

有限要素法による構造解析

有限要素法による流体解析

掃き出し法 Sweep Out Method Gauss Elimination Gauss-Jordan 本日の解法 掃き出し法 Sweep Out Method Gauss Elimination Gauss-Jordan

連立一次方程式の解法 a00x0+a01x1+a02x2+...+a0n-1xn-1= b0 a10x1+a11x1+a12x2+...+a1n-1xn-1= b1 . an-10x0+an-11x2+...+an-1n-1xn-1= bn-1

教科書の例題 2x + y + 3z = 13 x + 3y + 2z = 13 3x + 2y + z = 10

紙とペンによる解法 2x + y + 3z = 13 x + 3y + 2z = 13 3x + 2y + z = 10 2 1 3 13

係数を1にする 2 1 3 13 10 消去する 1 0.5 1.5 6.5 2.5 -3.5 -9.5

係数を1にする 1 0.5 1.5 6.5 2.5 -3.5 -9.5 消去する 消去する 1 1.4 5.2 0.2 2.6 -3.6 -10.8

消去する 1 1.4 5.2 0.2 2.6 -3.6 -10.8 係数を1にする 1 2 3 答え

数式表示 a00 a01  a02 . . . a0n-1 x0 b0 a10 a11  a12 . . . a1n-1 x1 b1 = . . . an-10 an-11 an-12 . . an-1n-1 xn-1 bn-1

係数を1にする 式がどうなるか考えよう a00 a01  a02 . . . a0n-1 b0 a10 a11  a12 . . . a1n-1 b1 . . an-10 an-11 an-12 . . an-1n-1 bn-1

ピボットでわる a00/a00 a01/a00 a02/a00 …. a10 a11  a12 . . . a1n-1 b1 消去する 式がどうなるか考えよう . . an-10 an-11 an-12 . . an-1n-1 bn-1

ピボットで割ったもの 1 a01  a02 . . . a10-1*a10 a11-a01*a10 a12-a02*a10 ... 消去する . . この計算は黄色の行ではしない!! an-10-1*an-10 an-11-a01*an-10...

消去する 1 a01 a02 …. 0 a11 a12 …. . . 1にする 消去する 0 an-11 an-12 ....

教科書 20P #include <stdio.h> #include <math.h> #define N 3 #define EPS .001 int main() { double a[N][N+1]={ { 2, 1, 3, 13}, { 1, 3, 2, 13}, { 3, 2, 1, 10} }; double pivot, del; int i, j, k, l; 教科書 20P

if( fabs(pivot) < EPS ){ printf("ピボット数が許容範囲以下\n"); return 1; } for(i=0;i<N;i++){ pivot = a[i][i]; if( fabs(pivot) < EPS ){ printf("ピボット数が許容範囲以下\n"); return 1; } for( j=i; j < N+1; j++) a[i][j]=a[i][j] / pivot; for(k=0; k<N;k++){ del = a[k][i]; for( j=i;j<N+1; j++) if( k!=i) a[k][j]-=del*a[i][j]; 対角行を代入 ゼロ割を避ける 対角行を1にする 等しくないとき真 代入演算子

2 1 3 13 10 for(i=0;i<N;i++){ pivot = a[i][i]; if( fabs(pivot) < EPS ){ printf("ピボット数が許容範囲以下\n"); return 1; } for( j=i; j < N+1; j++) a[i][j]=a[i][j] / pivot; for(k=0; k<N;k++){ del = a[k][i]; for( j=i;j<N+1; j++) if( k!=i) a[k][j]-=del*a[i][j]; 対角行を代入 1にする 1にする 2 1 3 13 10

1 0.5 1.5 6.5 3 2 13 10 for(i=0;i<N;i++){ pivot = a[i][i]; if( fabs(pivot) < EPS ){ printf("ピボット数が許容範囲以下\n"); return 1; } for( j=i; j < N+1; j++) a[i][j]=a[i][j] / pivot; for(k=0; k<N;k++){ del = a[k][i]; for( j=i;j<N+1; j++) if( k!=i) a[k][j]-=del*a[i][j]; 1 0.5 1.5 6.5 3 2 13 10 0にする 1にする

printf("X%d = %6.2lf\n", l, a[l][N] ); return 0; } for( l=0; l<N; l++) printf("X%d = %6.2lf\n", l, a[l][N] ); return 0; } 出力

教科書の結果

演習問題2.1 3x + y + z = 10 x + 5y + 2z = 21 x + 2y + 5z = 30

演習2.1 #include <stdio.h> #include <math.h> #define N 3 #define EPS .001 int main() { double a[N][N+1]={ { 3, 1, 1, 10}, { 1, 5, 2, 21}, { 1, 2, 5, 30} }; double pivot, del; int i, j, k, l; 演習2.1 変更

演習問題2.1の結果