スライド 1

Similar documents
スライド 1

スライド 1

スライド 1

memo

スライド 1

DVIOUT

comment.dvi

数値計算法

memo

今後の予定 6/29 パターン形成第 11 回 7/6 データ解析第 12 回 7/13 群れ行動 ( 久保先生 ) 第 13 回 7/17 ( 金 ) 休講 7/20 まとめ第 14 回 7/27 休講?

Prog1_12th

行列、ベクトル

2006年10月5日(木)実施

関数の呼び出し ( 選択ソート ) 選択ソートのプログラム (findminvalue, findandreplace ができているとする ) #include <stdio.h> #define InFile "data.txt" #define OutFile "sorted.txt" #def

関数の呼び出し ( 選択ソート ) 選択ソートのプログラム (findminvalue, findandreplace ができているとする ) #include <stdiu.h> #define InFile "data.txt" #define OutFile "surted.txt" #def

kiso2-09.key

Taro-再帰関数Ⅱ(公開版).jtd

プログラミング基礎

Microsoft PowerPoint ppt

次に示す数値の並びを昇順にソートするものとする このソートでは配列の末尾側から操作を行っていく まず 末尾の数値 9 と 8 に着目する 昇順にソートするので この値を交換すると以下の数値の並びになる 次に末尾側から 2 番目と 3 番目の 1

PowerPoint Presentation

cp-7. 配列

PowerPoint Presentation

PowerPoint Presentation

memo

演習課題No12

Taro-再帰関数Ⅲ(公開版).jtd

Gauss

C言語による数値計算プログラミング演習

Microsoft PowerPoint - 計算機言語 第7回.ppt

09.pptx

FORTRAN( と C) によるプログラミング 5 ファイル入出力 ここではファイルからデータを読みこんだり ファイルにデータを書き出したりするプログラムを作成してみます はじめに テキスト形式で書かれたデータファイルに書かれているデータを読みこんで配列に代入し 標準出力に書き出すプログラムを作り

memo

実際の株価データを用いたオプション料の計算

memo

8 / 0 1 i++ i 1 i-- i C !!! C 2

Microsoft Word - COMP-MATH-2016-FULLTEXT.doc

Prog1_15th

第2回講義:まとめ

Taro-最大値探索法の開発(公開版

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

x(t) + t f(t, x) = x(t) + x (t) t x t Tayler x(t + t) = x(t) + x (t) t + 1 2! x (t) t ! x (t) t 3 + (15) Eular x t Teyler 1 Eular 2 Runge-Kutta

Microsoft PowerPoint - 14th.ppt [互換モード]

12.pptx

Microsoft PowerPoint - 10.pptx

数学の世界

プログラミング基礎

C言語による数値計算プログラミング演習

C による数値計算法入門 ( 第 2 版 ) 新装版 サンプルページ この本の定価 判型などは, 以下の URL からご覧いただけます. このサンプルページの内容は, 新装版 1 刷発行時のものです.

/* do-while */ #include <stdio.h> #include <math.h> int main(void) double val1, val2, arith_mean, geo_mean; printf( \n ); do printf( ); scanf( %lf, &v

Microsoft Word - no02.doc

Taro-プログラミングの基礎Ⅱ(公

プログラミング実習I

【FdData中間期末過去問題】中学数学2年(連立方程式計算/加減法/代入法/係数決定)

PowerPoint Presentation

Microsoft Word - Training10_プリプロセッサ.docx

I. Backus-Naur BNF S + S S * S S x S +, *, x BNF S (parse tree) : * x + x x S * S x + S S S x x (1) * x x * x (2) * + x x x (3) + x * x + x x (4) * *

Microsoft PowerPoint - 12.ppt [互換モード]

PowerPoint プレゼンテーション

Microsoft PowerPoint - 4.pptx

講習No.9

バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科

:30 12:00 I. I VI II. III. IV. a d V. VI

Microsoft PowerPoint - prog06.ppt

Microsoft PowerPoint - 説明2_演算と型(C_guide2)【2015新教材対応確認済み】.pptx

Microsoft Word - Cプログラミング演習(12)

Microsoft PowerPoint - 13.ppt [互換モード]

数値計算

フローチャートの書き方

Microsoft PowerPoint - 10.pptx

<4D F736F F D E4F8E9F82C982A882AF82E98D7397F1>

に対して 例 2: に対して 逆行列は常に存在するとは限らない 逆行列が存在する行列を正則行列 (regular matrix) という 正則である 逆行列が存在する 一般に 正則行列 A の逆行列 A -1 も正則であり (A -1 ) -1 =A が成り立つ また 2 つの正則行列 A B の積

今回のプログラミングの課題 ( 前回の課題で取り上げた )data.txt の要素をソートして sorted.txt というファイルに書出す ソート (sort) とは : 数の場合 小さいものから大きなもの ( 昇順 ) もしくは 大きなものから小さなもの ( 降順 ) になるよう 並び替えること

Microsoft PowerPoint - prog07.ppt

プログラミング基礎

XMPによる並列化実装2

行列の反復解法 1. 点 Jacobi 法 数値解法の重要な概念の一つである反復法を取り上げ 連立一次方程式 Au=b の反復解法を調べる 行列のスペクトル半径と収束行列の定義を与える 行列のスペクトル半径行列 Aの固有値の絶対値の最大値でもって 行列 Aのスペクトル半径 r(a) を与える 収束行

Microsoft PowerPoint - C4(反復for).ppt

演算増幅器

第9回 配列(array)型の変数

2018年度 岡山大・理系数学

プログラミング基礎

第2回

Microsoft PowerPoint ppt

プログラミング基礎

Microsoft PowerPoint pptx

Microsoft PowerPoint - mp11-02.pptx

物質工学科 田中晋

Microsoft Word - no15.docx

slide5.pptx

Microsoft PowerPoint - adi05.ppt [互換モード]

DVIOUT

プログラミング基礎

Prog1_6th

12.2 電気回路網に関するキルヒホッフの法則による解法 2 多元連立 1 次方程式の工学的応用についての例を 2 つ示す.1 つはブリッジ T 型回路, もう 1 つはホーイストンブリッジ回路である. 示された回路図と与えられた回路定数からキルヒホッフの法則を使って多元連立 1 次方程式を導出する

講習No.8

謗域・ュ逕ィppt

Microsoft PowerPoint - 12.ppt [互換モード]

PowerPoint プレゼンテーション

画像ファイルを扱う これまでに学んだ条件分岐, 繰り返し, 配列, ファイル入出力を使って, 画像を扱うプログラムにチャレンジしてみよう

Transcription:

数値解析 平成 30 年度前期第 10 週 [6 月 12 日 ] 静岡大学工学研究科機械工学専攻ロボット 計測情報分野創造科学技術大学院情報科学専攻 三浦憲二郎

講義アウトライン [6 月 12 日 ] 連立 1 次方程式の直接解法 ガウス消去法 ( 復習 ) 部分ピボット選択付きガウス消去法

連立 1 次方程式 連立 1 次方程式の重要性 非線形の問題は基本的には解けない. 非線形問題を線形化して解く. 複雑な構造物, 単純な要素に分解 各要素に対して線形方程式を立てる. 重ね合わせの原理により統合 ただし, 変数の数は膨大 コンピュータにより数値的に解く.

ガウス消去法 連立 1 次方程式の解法 x-y=1 (1) x+2y=4 (2) 1. 代入法式 (1) より y=x-1, 式 (2) に代入 x+2(x-1)=4, したがって 3x=6, よって x=2, 式 (1) より y=1 2. 加減法式 (2) より式 (1) を引く :3y=3, したがって y=1, 式 (1) より x=2 ガウス消去法は, 加減法をコンピュータに適した方法で行う.

ガウス消去法 :3 元 (1) 第 1 列の 2 行目と 3 行目を 0 にする. 第 1 行 (-5/3)+ 第 2 行目 第 1 行 (-4/3)+ 第 3 行目 (2) 第 2 列の 3 行目を 0 にする. 第 2 行 1+ 第 3 行 (1), (2) : 前進消去 (3) x3, x2, x1 の順に代入して答えを求める. (3) : 後退代入

( 前進消去 ) ガウス消去法 :n 元

( 後退代入 ) ガウス消去法 :n 元

ガウス消去法 : アルゴリズム 行列 A とベクトル b の入力 /* 前進消去 */ /* 後退代入 */ b を出力 /* 答えは b に上書き */

ガウス消去法 : プログラム #include <stdio.h> #include <stdlib.h> #define N 4 /* N 次正方行列 */ void input_matrix(double a[n][n],char c,file* fin, FILE* fout); void input_vector(double b[n],char c,file* fin,file* fout); void simple_gauss(double a[n][n],double b[n]); int main(void){ FILE *fin, *fout; double a[n][n], b[n]; int i; if((fin=fopen("input.dat","r"))==null) exit(1); if((fout=fopen("output.dat","w"))==null) exit(1); input_matrix(a, A,fin,fout); input_vector(b, b,fin,fout); simple_gauss(a,b); fprintf(fout,"ax=bの解は次の通りです n"); for(i=0;i<n;i++){ fprintf(fout,"%f n",b[i]); fclose(fin); fclose(fout); return 0;

ガウス消去法 : プログラム void simple_gauss(double a[n][n],double b[n]){ int i,j,k; double alpha, tmp; for(k=0;k<n-1;k++){ /* 前進消去 */ for(i=k+1;i<n;i++){ alpha=-a[i][k]/a[k][k]; for(j=k+1;j<n;j++){ a[i][j]=a[i][j]+alpha*a[k][j]; b[i]=b[i]+alpha*b[k]; b[n-1]=b[n-1]/a[n-1][n-1]; /* 後退代入 */ for(k=n-2;k>=0;k--){ tmp=b[k]; for(j=k+1;j<n;j++){ tmp=tmp-a[k][j]*b[j]; b[k]=tmp/a[k][k];

部分ピボット選択付きガウス消去法 (1) 第 1 列の絶対最大要素 : 第 3 行. 第 1 行と第 3 行を交換 (2) 第 1 列の第 2 行, 第 3 行を 0 にする.

部分ピボット選択付きガウス消去法 (3) 第 2 列以下で第 2 列の絶対最大要素 : 第 3 行. 第 2 行と第 3 行を交換 (4) 第 2 列の第 3 行を 0 にする.

部分ピボット選択付きガウス消去法 n 元連立 1 次方程式 すでに消去作業を k-1 回行っていると仮定 1) k 回目の消去作業において a ik (i=k,k+1,,n-1) のうちで最大のものを調べて, その行番号を ip とする. 2) ip k ならば,k 行目と ip 行目を入れ換えて消去作業を行う. アルゴリズム

部分ピボット選択付きガウス消去法 アルゴリズム ( 続き )

ピボット付きガウス消去法 : プログラム void gauss(double a[n][n],double b[n]){ int i,j,k,ip; double alpha, tmp; double amax, eps=pow(2.0,-50.0); /* eps=2^{-50 とする */ for(k=0;k<n-1;k++){ amax=fabs(a[k][k]); ip=k; /* ピボットの選択 */ for(i=k+1;i<n;i++){ if(fabs(a[i][k])>amax){ /* fabs( ); は絶対値を返す. C 言語入門 p.264 amax=fabs(a[i][k]); ip=i; if(amax<eps) { /* 正則性の判定 */ printf(" 入力した行列は正則ではない!! n"); exit(1); if(ip!=k){ for(j=k;j<n;j++){ tmp=a[k][j]; a[k][j]=a[ip][j]; a[ip][j]=tmp; tmp=b[k]; b[k]=b[ip]; b[ip]=tmp; for(i=k+1;i<n;i++){ /* 前進消去 */ alpha=-a[i][k]/a[k][k]; for(j=k+1;j<n;j++){ a[i][j]=a[i][j]+alpha*a[k][j]; b[i]=b[i]+alpha*b[k]; b[n-1]=b[n-1]/a[n-1][n-1]; /* 後退代入 */ for(k=n-2;k>=0;k--){ tmp=b[k]; for(j=k+1;j<n;j++){ tmp=tmp-a[k][j]*b[j]; b[k]=tmp/a[k][k];

データ入出力 p.19 C 言語入門 p.282) プログラム 2.3 改 #include <stdio.h> #include <stdlib.h> #define N 4 void input_matrix(double a[n][n],char c,file* fin,file* fout); void input_vector(double b[n],char c,file* fin,file* fout); int main(void) { FILE *fin,*fout; double a[n][n],b[n]; if((fin=fopen("input.dat","r"))==null){ printf(" ファイルは見つかりません :input.dat n"); exit(1); if((fout=fopen("output.dat","w"))==null){ printf(" ファイルが作成できません :output.dat n"); exit(1);

データ入出力 p.19 C 言語入門 p.282) プログラム 2.3 改続き input_matrix(a, A,fin,fout); /* 行列 A の入出力 */ input_vector(b, b,fin,fout); /* ベクトル b の入出力 */ fclose(fin); fclose(fout); void input_matrix(double a[n][n],char c,file* fin,file* fout){ int i,j; fprintf(fout," 行列 %cは次の通りです n",c); for(i=0;i<n;++i){ for(j=0;j<n;++j){ fscanf(fin,"%lf",&(a[i][j])); fprintf(fout,"%5.2f t",a[i][j]); fprintf(fout," n");

データ入出力 p.19 C 言語入門 p.282) プログラム 2.3 改続き void input_vector(double b[n],char c,file* fin,file* fout){ int i; fprintf(fout," ベクトル %cは次の通りです n",c); for(i=0;i<n;++i){ fscanf(fin,"%lf",&(b[i])); fprintf(fout,"%5.2f t",b[i]); fprintf(fout," n"); input.datの内容 1.0 2.0 1.0 1.0 4.0 5.0-2.0 4.0 4.0 3.0-3.0 1.0 2.0 1.0 1.0 3.0-1.0-7.0-12.0 2.0

データ入出力 p.19 C 言語入門 p.282) プログラム 2.3 改続き output.dat の内容 行列 Aは次の通りです. 1.0 2.0 1.0 1.0 4.0 5.0-2.0 4.0 4.0 3.0-3.0 1.0 2.0 1.0 1.0 3.0 ベクトルbは次の通りです. -1.0-7.0-12.0 2.0

まとめ 連立 1 次方程式の直接解法 ガウス消去法 部分ピボット選択付きガウス消去法 C 言語の基礎 2 次元配列 データ入出力