数値計算法

Size: px
Start display at page:

Download "数値計算法"

Transcription

1 12.1 電気回路網に関するキルヒホッフの法則による解法 1 工学的諸問題を多元連立 1 次方程式で表現することができる. 例えば, 荷物を最短の時間と最低のコストで輸送するためにはどのようなルートで物流を行うか という問題, 工場の部品の在庫の状況からいかに最小のコストで製品をつくるか という問題, 機械要素の運動の問題, 電気回路の解析の問題など, いくつか挙げられる. つまり, 計算機で多元連立方程式を解くことができれば, 幅広く工学の諸問題の解決に役立つ. ここではガウスの消去法で多元連立 1 次方程式を解く方法を学ぶ. 例題としてブリッジ T 型とホーイストンブリッジの電気回路を扱う ガウスの消去法による多元連立 1 次方程式の解法ガウスの消去法は 2 つの手順で進められる. 初めに前進消去 (forward elimination) を行い, 次に後退挿入 (back substitution) を行う. まず計算手順を具体的な例によって把握する. 次にそれらの処理の内容を式で示す 前進消去と後退挿入の手順多元連立 1 次方程式は四則演算 ( 加減乗除 ) と行や列の入替えを行って解ける. 前進消去では行列の左下の三角の部分を 0 にする演算を行う. 後退挿入では行列の下から解を求める演算を行う. 例題 1 次の 3 元連立 1 次方程式をガウスの消去法で解く. x 1 + 2x 2 + 3x 3 = 14 { 4x 1 + 5x 2 + 6x 3 = 32 7x 1 + 8x 2 = 前進消去 回数 番号 x1 x2 x3 b 演算内容 後退挿入 演 算 9x 3 = 27 x 3 = 27 9 = 3 3x 2 6(3) = x 2 = = 2 3 x 1 + 2(2) + 3(3) = 14 x 1 = = 1 答えは x 1=1,x 2=2,x 3=3 である.

2 しかしながら式の係数によっては, 前進消去ができない場合がある. 例題 2 ( 前進消去ができない場合 ) 次の 3 元連立 1 次方程式をガウスの消去法で解く. x 1 + 2x 2 + 3x 3 = 14 { 4x 1 + 8x 2 + 6x 3 = 38 7x 1 + 8x 2 = 23 前進消去を行っていくと,5のところで x 2 の係数が 0 となり, 計算を続けることができなくなる. そのような場合では,5と6 行を入れ換える ( つまり8と9). この操作は方程式の上下の位置を変える操作であるので, 結果に影響しない 前進消去 回数 番号 x1 x2 x3 b 操作 との交換 5 との交換 後退挿入 計 算 6x 3 = 18 x 3 = 18 6 = 3 6x 2 21(3) = x 2 = = 2 6 x 1 + 2(2) + 3(3) = 14 x 1 = = 1 答えは x 1=1,x 2=2,x 3=3 である. 5のように, 対角要素 a i i (i=1, 2,...) が 0 のとき, それ以降の前進消去はできなくなる. また, 対角要素が 0 に近い非常に小さい値のときは丸め誤差が大きくなる. それらを避けるためには対角要素の選択, つまりピボットティング (pivoting) が行われる. 具体的には a i j (i = j, j + 1,..., n ) の最大行を探して, その行と i 行を入れ換える. この様にすれば前進消去を進めることができる. 更に精度を上げるためには列方向にも同様のことを行う. 行および列の両方向についてのピボッティングを行うことを完全ピボッティングという.

3 ガウスの消去法の数式による表現 n 元連立 1 次方程式を次式で示す.(x n 以外は定数である.) a 11 a 12 a x 1n 1 b 1 [ a21 x a2n 2 b ] [ ] = [ 2 ] a n1 a n2 a nn x n b n (1) 要素 a 11, a 12,, a nn から構成される n n 行列に, 要素 b 1, b 2, b n から構成される列を付加し た次の行列について考える. a 11 a 12 a 1n b 1 [ a n1 a n2 a nn b n ] (2) 手順 1: 前進消去 各要素に対し, 次の演算を行う. a ij = a ij a im a mj a mm (3) ただし,m = 1, 2,, n - 1, i = m + 1, m + 2,, n, j = m, m + 1, m + 2,, n + 1. 一通りの計算 が終わると, 次式を得る. ただし 2 行以降の要素は値が変わるので, ダッシュ ( ) がつく. [ a 11 a 12 a 13 a 14 a 15 a 16 a 1n b 1 0 a 22 a 23 a 24 a 25 a 26 a 2n b a 33 a 34 a 35 a 36 a 3n b a 44 a 4n b 4 a 45 a a nn b n ] (4) 式 (4) は下の式 (5) の意味を持っている. [ a 11 a 12 a 13 a 14 a 15 a 16 a 1n 0 a 22 a 23 a 24 a 25 a 26 a 2n 0 0 a 33 a 34 a 35 a 36 a 3n a 44 a 4n a 45 a 46 x 1 x 2 x n] a nn ] [ = [ b 1 b 2 b n ] (5) 手順 2: 後退挿入 式 (5) の n 行に注目する.a nn x n = b n の関係からx n が得られる. 次に n - 1 行では, a n 1 n 1 x n 1 + a nn x n = b n 1 の関係からx n 1 が得られる. 同様に下から順に繰り返すことによっ て,x 1 から x n が得られる. これらの演算は次のように表現できる. x n = a n n+1 a n n x i = a i n+1 n i j=1 a i i+j x i+j a ij (6) (7) ただし,i = n - 1,, 2, 1,a n n + 1 = b n である.

4 プログラムの処理手順の確認とその実行プログラム ( 付録参照 ) の処理内容を確認する. プログラムには例題 1 についてのデータがセットされている. 次にプログラムのコメント行,make procedure に従ってコンパイルを行い, プログラムを実行する. ガウスの消去法の演算過程と解はテキスト画面に表示される. 出力された結果と例題 1 の結果とを比較して計算が正しいことを確認する. 出力について以下に説明する. 0 回目 x 1 x 2 x 3 ( ピボッティング : 行方向 :1 行と 3 行の入れ替えをする ) 回目 x 1 x 2 x 3 ( ピボッティング : 列方向 :1 列と 2 列の入れ替えをする ) 回目 x 2 x 1 x 3 (2,3 行について前進消去をする ) 回目 x 2 x 1 x 3 ( ピボッティング : 列方向 :2 列と 3 列の入れ替えをする ) 回目 x 2 x 3 x 1 (3 行について前進消去をする ) 回目 x 2 x 3 x 1 ( 前進消去終わり )

5 実行結果 連立方程式を解く際には解の種類が一意に決まるか否かあらかじめ調査するとよい. 前述の例題 1 と 2 の係数の rank はそれぞれ 3 であり,x の数 n と同じであった. つまり 1 種類の解が存在することになる. 連立方程式の係数によっては rank<n となることもある. そのような場合では無数の解が存在する. その様な問題についてこのプログラムを実行すると, そのうちの一つだけの解が求まることになる. 例えば次の問題を考える. x 1 + 2x 2 + 3x 3 = 14 { 4x 1 + 5x 2 + 6x 3 = 32 7x 1 + 8x 2 + 9x 3 = 23 係数部分をまとめると次のようになる. ( 4 5 6) この rank は 2 であり, 解は無数にある. 例えば次のようなものがある. x 1=1,x 2=2,x 3=3 x 1=2,x 2=0,x 3=4 x 1=10,x 2=-16,x 3=12 従って,n 元連立 1 次方程式の問題を解く際には rank を求めておくとよい. 次に例題 2 についても計算してみよ.( プログラムの編集については付録を参照のこと.) このプログラムが完全ピボッティングに対応していることを確認せよ. レポート C n 元連立 1 次方程式で表現できる問題を見つけ, プログラムを使って解を求めよ. 問題は自 身で行っている研究の内容や工学的内容が望ましい. レポートの書式はレポート A に従うこと. 参考文献 1) 佐藤次男ほか,C による理工学問題の解法, 日刊工業新聞社,ISBN

6 付録ガウスの消去法のプログラム 黄色い部分にセットされているデータは例題 1 のものである. 他の問題を計算するときには黄色い部分を変更する. /* Gauss elimination method */ // make procedure: gcc 12_GEM.c -o 12_GEM -lm #include <stdio.h> #include <math.h> #define NUMBER_OF_DATA 3 // 連立方程式の解 (x1,x2,x3, ) の個数 #define NUNBER_OF_CF 11 // 扱う解の数の上限の数 static double data[nunber_of_cf][nunber_of_cf+1] = { // ここでは例題 1 のデータをセットする {1, 2, 3, 14, /* a11, a12,..., a1n, b1 */ {4, 5, 6, 32, /* a21, a22,..., a2n, b2 */ {7, 8, 0, 23 /* an1, an2,..., ann, bn */ ; int GEM(); void show_procedure(); // ガウスの消去法を行う関数のプロトタイプ宣言 // 配列変数の内容を画面へ表示するための関数のプロトタイプ宣言 int n = (int)number_of_data; double epsilon=1e-18; double x[nunber_of_cf]; // 未知変数 (x1,x2,x3) の個数 // ピボット 対角要素の下限値をセットする // 連立方程式の解 ( x1, x2,..., xn) がセットされる配列 int main() { int i; int n=(int)number_of_data; // 連立方程式の解 つまり x の個数をセットする int pivot; // ピボットの状態を示すフラグ (0: 対角要素が 0 に近くて計算不可,1: 計算可 ) pivot = GEM(); // ガウスの消去法を実行し ピボットの状態を戻り値として得る if(pivot == 1) //1: 計算結果 ( 解 x1 x2, ) を表示 1!=: 計算不可の表示 for(i=0 ;i<n; i++) { printf("x %d = %lf \n", i+1, x[i]); else { printf("this process was stopped, because a pivot is to small.\n"); // 対角要素が 0 に近接した場合には計算終了となる i=getchar(); // 計算終了後に直ぐ画面が消えないようにキー入力をする return 0; // プログラムを正常終了する // Gauss Elimination Method // 連立方程式の要素と変数の関係 // AX=B // // A = a11, a12,..., a1n, X = x1, B = b1 // a21, a22,..., a2n x2 b2 // // an1, an2,..., ann xn bn // // data = a11, a12,..., a1n, b1, data[0][0] =a11 data[ 行 ][ 列 ] // a21, a22,..., a2n, b2, data[1][0] =a21 //... // an1, an2,..., ann, bn, data[n-1][n-1] =ann // // x[0] =x1, x[1] =x2,..., x[n-1] =xn

7 // 下の 3 つの行は原理で述べられた数式の添え字とプログラム中の変数の添え字との対応をとるためのマクロ #define A(x, y) data[x-1][y-1] #define X(z) x[z-1] #define LN(z) ln[z-1] int GEM() // ガウスの消去法を実行する副関数 { double max; // ピボッティングのとき 要素の最大値を記憶するための変数 double tmp, tmp1; // テンポラリ変数 int ln[number_of_data+1]; // 列の入れ替えの情報を保存する配列変数 int column, i, itmp, ipj, j, m, nm1, l, row; //row: 行 show_procedure(); // 配列変数の内容を画面へ表示する for(i=1; i<=n; i++) { LN(i)=i; // 入れ替え前の解 x の添え字 (i=1,2, ) をセット for(m=1; m<=n-1; m++) { // 前進消去の開始 max = 0.0; // 要素の最大値を記憶するための変数をリセット for(i=m; i<=n; i++) { for(j=m; j<=n; j++) { // 要素が最大のものを探索する : ピボッティング if(max >= fabs(a(i, j))) { continue; //con.: の前へ max = fabs(a(i, j)); // 最大値を記録する row = i; // 最大の要素の行と列の位置を記録する column = j; // row: 行 column: 列 if(max <= epsilon) { return 0; // もし最大のものが 0 に近ければ演算停止 if(m!= row) { //m==row は行の最後を意味する for(l=m; l<=n+1; l++) { tmp = A(row,l); // 行方向のピボッティング. 行の入れ替え A(row, l) = A(m, l); A(m, l) = tmp; printf("coefficient and constant were changed in row-direction: %d <- > %d lines.\n", m, row); // 入れ替えの情報を画面へ表示する show_procedure(); // 配列変数の内容を画面へ表示する /* もし m==column: 列の最後 */ if(m!= column) { //m==column は列の最後を意味する for(l=1; l<=n; l++) { // 列方向のピボッティング. 列の入れ替え tmp = A(l, column); A(l, column) = A(l, m); A(l, m) = tmp; printf("coefficient and constant were changed in column-direction: %d <-> %d lines.\n", m, column); // 入れ替えの情報を画面へ表示する show_procedure(); // 配列変数の内容を画面へ表示する // 後の後退挿入で解 (x1,x2, ) の存在する列の情報が必要になるため tmp1 = LN(m); // 列の入れ替えの位置を LN に記録する LN(m) = LN(column); LN(column) = tmp1; for(i=m+1; i<=n; i++) { // 前進消去 ( ガウスの消去法 ) による計算 for(j=n+1; j>=m; j--) { A(i, j) -= A(i, m) * A(m, j) / A(m, m); // 式 (3) の計算

8 printf("coefficient and constant after the forward elimination, %d line below.\n", m+1); show_procedure(); // 配列変数の内容を画面へ表示する if(fabs(a(n, n)) <= epsilon) { return 0; // もし Ann が 0 に近ければ演算打ち切り // 後退挿入の開始 X(n) = A(n, n+1) / A(n, n); // 後退挿入の計算, 式 (6), xn is set. itmp = LN(n); A(n, itmp) = X(n); // a[n-1][itemp-1]=xn (=LN(n) ) // もし左端からガウスの消去法を行うと 左端の係数が0となり 計算できない // つまり右端から計算するために i--とする for(i=n-1; i>=1; i--) { nm1 = n - i; // nm1 means n minus 1:(n-1) X(i) = 0.0; // 式 (7) の計算 for(j=1; j<=nm1; j++) { // sigma(aii+j*xi+j) ipj = i + j; // ipj means i plus j:(i+j) X(i) += A(i, ipj) * X(ipj); // X(i) = A(i, ipj) * X(ipj) + X(i); X(i) = (A(i, n+1) - X(i)) / A(i, i); /* x[i] <-> xi */ itmp = LN(i); A(n, itmp) = X(i); for(i=1; i<=n; ++i) { X(i) = A(n, i); // 入れ替えを元に戻す return 1; void show_procedure() // 配列変数の内容を画面へ表示する関数 { int i, j; for(i=0; i<n; i++) { for(j=0; j<n+1; j++) { printf("%8.3lf", data[i][j]); printf("\n"); printf("\n"); メモ : プログラムで変数 LN は, 列の入れ替えのピボッティングのとき, 列の入れ替えの位置を記憶するために使われる. 列の入替では解の位置が変わってしまう. 具体的例を以下に示す. 例 : x 1 x 2 x 3 x n (x 2 と x 3 の列を入れ替えると ) x 1 x 3 x 2 x n この状態では後退消去で連立方程式の解 (x 1, x 2, ) を求めることはできない. つまり列の入れ替えのピボッティングが終わった後に, また列の要素の位置を交換し, その後, 後退消去を計算することになる. そのためピボッティング以前の解の位置を変数 LN に保存する.

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

12.2 電気回路網に関するキルヒホッフの法則による解法 2 多元連立 1 次方程式の工学的応用についての例を 2 つ示す.1 つはブリッジ T 型回路, もう 1 つはホーイストンブリッジ回路である. 示された回路図と与えられた回路定数からキルヒホッフの法則を使って多元連立 1 次方程式を導出する 12.2 電気回路網に関するキルヒホッフの法則による解法 2 多元連立 1 次方程式の工学的応用についての例を 2 つ示す.1 つはブリッジ T 型回路, もう 1 つはホーイストンブリッジ回路である. 示された回路図と与えられた回路定数からキルヒホッフの法則を使って多元連立 1 次方程式を導出する. その式のパラメータを前述のプログラムに反映させてシミュレーションを行う. 12.2.0 キルヒホッフの法則

More information

スライド 1

スライド 1 数値解析 平成 30 年度前期第 10 週 [6 月 12 日 ] 静岡大学工学研究科機械工学専攻ロボット 計測情報分野創造科学技術大学院情報科学専攻 三浦憲二郎 講義アウトライン [6 月 12 日 ] 連立 1 次方程式の直接解法 ガウス消去法 ( 復習 ) 部分ピボット選択付きガウス消去法 連立 1 次方程式 連立 1 次方程式の重要性 非線形の問題は基本的には解けない. 非線形問題を線形化して解く.

More information

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

Taro-再帰関数Ⅲ(公開版).jtd 0. 目次 1 1. ソート 1 1. 1 挿入ソート 1 1. 2 クイックソート 1 1. 3 マージソート - 1 - 1 1. ソート 1 1. 1 挿入ソート 挿入ソートを再帰関数 isort を用いて書く 整列しているデータ (a[1] から a[n-1] まで ) に a[n] を挿入する操作を繰り返す 再帰的定義 isort(a[1],,a[n]) = insert(isort(a[1],,a[n-1]),a[n])

More information

memo

memo 数理情報工学演習第一 C プログラミング演習 ( 第 5 回 ) 2015/05/11 DEPARTMENT OF MATHEMATICAL INFORMATICS 1 今日の内容 : プロトタイプ宣言 ヘッダーファイル, プログラムの分割 課題 : 疎行列 2 プロトタイプ宣言 3 C 言語では, 関数や変数は使用する前 ( ソースの上のほう ) に定義されている必要がある. double sub(int

More information

cp-7. 配列

cp-7. 配列 cp-7. 配列 (C プログラムの書き方を, パソコン演習で学ぶシリーズ ) https://www.kkaneko.jp/cc/adp/index.html 金子邦彦 1 本日の内容 例題 1. 月の日数配列とは. 配列の宣言. 配列の添え字. 例題 2. ベクトルの内積例題 3. 合計点と平均点例題 4. 棒グラフを描く配列と繰り返し計算の関係例題 5. 行列の和 2 次元配列 2 今日の到達目標

More information

プログラミング基礎

プログラミング基礎 C プログラミング Ⅱ 演習 2-1(a) BMI による判定 文字列, 身長 height(double 型 ), 体重 weight (double 型 ) をメンバとする構造体 Data を定義し, それぞれのメンバの値をキーボードから入力した後, BMI を計算するプログラムを作成しなさい BMI の計算は関数化すること ( ) [ ] [ ] [ ] BMI = 体重 kg 身長 m 身長

More information

Taro-数値計算の基礎Ⅱ(公開版)

Taro-数値計算の基礎Ⅱ(公開版) 0. 目次 1. 2 分法 2. はさみうち法 3. 割線法 4. 割線法 ( 2 次曲線近似 ) 5. ニュートン法 ( 接線近似 ) - 1 - 1. 2 分法 区間 [x0,x1] にある関数 f(x) の根を求める 区間 [x0,x1] を xm=(x0+x1)/2 で 2 等分し 区間 [x0,xm],[xm,x1] に分割する f(xm) の絶対値が十分小さい値 eps より小さいとき

More information

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

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

More information

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

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ 今回のプログラミングの課題 次のステップによって 徐々に難易度の高いプログラムを作成する ( 参照用の番号は よくわかる C 言語 のページ番号 ) 1. キーボード入力された整数 10 個の中から最大のものを答える 2. 整数を要素とする配列 (p.57-59) に初期値を与えておき

More information

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

次に示す数値の並びを昇順にソートするものとする このソートでは配列の末尾側から操作を行っていく まず 末尾の数値 9 と 8 に着目する 昇順にソートするので この値を交換すると以下の数値の並びになる 次に末尾側から 2 番目と 3 番目の 1 4. ソート ( 教科書 p.205-p.273) 整列すなわちソートは アプリケーションを作成する際には良く使われる基本的な操作であり 今までに数多くのソートのアルゴリズムが考えられてきた 今回はこれらソートのアルゴリズムについて学習していく ソートとはソートとは与えられたデータの集合をキーとなる項目の値の大小関係に基づき 一定の順序で並べ替える操作である ソートには図 1 に示すように キーの値の小さいデータを先頭に並べる

More information

行列、ベクトル

行列、ベクトル 行列 (Mtri) と行列式 (Determinnt). 行列 (Mtri) の演算. 和 差 積.. 行列とは.. 行列の和差 ( 加減算 ).. 行列の積 ( 乗算 ). 転置行列 対称行列 正方行列. 単位行列. 行列式 (Determinnt) と逆行列. 行列式. 逆行列. 多元一次連立方程式のコンピュータによる解法. コンピュータによる逆行列の計算.. 定数項の異なる複数の方程式.. 逆行列の計算

More information

Microsoft PowerPoint - 09.pptx

Microsoft PowerPoint - 09.pptx 情報処理 Ⅱ 第 9 回 2014 年 12 月 22 日 ( 月 ) 関数とは なぜ関数 関数の分類 自作関数 : 自分で定義する. ユーザ関数 ユーザ定義関数 などともいう. 本日のテーマ ライブラリ関数 : 出来合いのもの.printf など. なぜ関数を定義するのか? 処理を共通化 ( 一般化 ) する プログラムの見通しをよくする 機能分割 ( モジュール化, 再利用 ) 責任 ( あるいは不具合の発生源

More information

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

Microsoft PowerPoint - program.ppt [互換モード] プログラミング演習 バージョン 1 担当教員 : 綴木馴 プログラムの決まりについて学ぶ おすすめする参考書 ザ C 戸川隼人サイエンス社 本日の予定 1. 授業の説明. 2. コンパイラーのインストール. プログラムの決まりについて学ぶ,P31 /* The most in C */ /* hello.c */ printf("hello,world n"); プログラムの決まり ( コメント )

More information

[1] #include<stdio.h> main() { printf("hello, world."); return 0; } (G1) int long int float ± ±

[1] #include<stdio.h> main() { printf(hello, world.); return 0; } (G1) int long int float ± ± [1] #include printf("hello, world."); (G1) int -32768 32767 long int -2147483648 2147483647 float ±3.4 10 38 ±3.4 10 38 double ±1.7 10 308 ±1.7 10 308 char [2] #include int a, b, c, d,

More information

PowerPoint Presentation

PowerPoint Presentation ファイルの入出力 芝浦工業大学情報工学科 青木義満 今回の講義内容 ファイル入出力 ファイルからのデータ読込み ファイルと配列 2 1 ファイルへのデータ書き込み ( 復習 ) ソースファイル名 :fileio1.c データをファイルに書き込み #include int main(void) { ファイルポインタ宣言 int student_id = 100; char name[

More information

Taro-スタック(公開版).jtd

Taro-スタック(公開版).jtd 0. 目次 1. 1. 1 配列によるの実現 1. 2 再帰的なデータ構造によるの実現 1. 3 地図情報処理 1. 4 問題 問題 1 グラフ探索問題 - 1 - 1. は データの出し入れが一カ所で行われ 操作は追加と削除ができるデータ構造をいう 出入口 追加 削除 操作 最初 111 追加 111 222 追加 111 222 333 追加 111 222 333 444 追加 111 222

More information

情報工学実験 C コンパイラ第 2 回説明資料 (2017 年度 ) 担当 : 笹倉 佐藤

情報工学実験 C コンパイラ第 2 回説明資料 (2017 年度 ) 担当 : 笹倉 佐藤 情報工学実験 C コンパイラ第 2 回説明資料 (2017 年度 ) 担当 : 笹倉 佐藤 2017.12.7 前回の演習問題の解答例 1. 四則演算のできる計算機のプログラム ( 括弧も使える ) 2. 実数の扱える四則演算の計算機のプログラム ( 実数 も というより実数 が が正しかったです ) 3. 変数も扱える四則演算の計算機のプログラム ( 変数と実数が扱える ) 演習問題 1 で行うべきこと

More information

Microsoft PowerPoint - kougi2.ppt

Microsoft PowerPoint - kougi2.ppt C プログラミング演習 第 2 回 Microsoft Visual Studio.NET を使ってみよう 説明 例題 1. プログラム実行の体験 コンピュータを役に立つ道具として実感する 次ページのプログラムを使って, Microsoft Visual Studio.NETでの C++ ソースファイル編集, ビルド, テスト実行の一連の過程を体験する 例題 1 のプログラムの機能 計算の繰り返し

More information

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

第9回 配列(array)型の変数 第 12 回 配列型の変数 情報処理演習 ( テキスト : 第 4 章, 第 8 章 ) 今日の内容 1. 配列の必要性 2. 配列の宣言 3. 配列変数のイメージ 4. 配列変数を使用した例 5. 範囲を超えた添字を使うと? 6. 多次元配列変数 7. 多次元配列変数を使用した例 8. データのソーティング 9. 今日の練習問題 多数のデータ処理 1. 配列の必要性 ( テキスト 31 ページ )

More information

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

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

More information

プログラミング実習I

プログラミング実習I プログラミング実習 I 05 関数 (1) 人間システム工学科井村誠孝 [email protected] 関数とは p.162 数学的には入力に対して出力が決まるもの C 言語では入出力が定まったひとまとまりの処理 入力や出力はあるときもないときもある main() も関数の一種 何かの仕事をこなしてくれる魔法のブラックボックス 例 : printf() 関数中で行われている処理の詳細を使う側は知らないが,

More information

数学の世界

数学の世界 東京女子大学文理学部数学の世界 (2002 年度 ) 永島孝 17 6 行列式の基本法則と効率的な計算法 基本法則 三次以上の行列式についても, 二次の場合と同様な法則がなりたつ ここには三次の場合を例示するが, 四次以上でも同様である 1 単位行列の行列式の値は 1 である すなわち 1 0 0 0 1 0 1 0 0 1 2 二つの列を入れ替えると行列式の値は 1 倍になる 例えば a 13 a

More information

Microsoft Word - 補論3.2

Microsoft Word - 補論3.2 補論 3. 多変量 GARC モデル 07//6 新谷元嗣 藪友良 対数尤度関数 3 章 7 節では 変量の対数尤度を求めた ここでは多変量の場合 とくに 変量について対数尤度を求める 誤差項 は平均 0 で 次元の正規分布に従うとする 単純化のため 分散と共分散は時間を通じて一定としよう ( この仮定は後で変更される ) したがって ij から添え字 を除くことができる このとき と の尤度関数は

More information

Excelを用いた行列演算

Excelを用いた行列演算 を用いた行列演算 ( 統計専門課程国民 県民経済計算の受講に向けて ) 総務省統計研究研修所 この教材の内容について計量経済学における多くの経済モデルは連立方程式を用いて記述されています この教材は こうした科目の演習においてそうした連立方程式の計算をExcelで行う際の技能を補足するものです 冒頭 そもそもどういう場面で連立方程式が登場するのかについて概括的に触れ なぜ この教材で連立方程式の解法について事前に学んでおく必要があるのか理解していただこうと思います

More information

/* 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

/* 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 1 http://www7.bpe.es.osaka-u.ac.jp/~kota/classes/jse.html [email protected] /* do-while */ #include #include int main(void) double val1, val2, arith_mean, geo_mean; printf( \n );

More information

航空機の運動方程式

航空機の運動方程式 可制御性 可観測性. 可制御性システムの状態を, 適切な操作によって, 有限時間内に, 任意の状態から別の任意の状態に移動させることができるか否かという特性を可制御性という. 可制御性を有するシステムに対し, システムは可制御である, 可制御なシステム という言い方をする. 状態方程式, 出力方程式が以下で表されるn 次元 m 入力 r 出力線形時不変システム x Ax u y x Du () に対し,

More information

/*Source.cpp*/ #include<stdio.h> //printf はここでインクルードして初めて使えるようになる // ここで関数 average を定義 3 つの整数の平均値を返す double 型の関数です double average(int a,int b,int c){

/*Source.cpp*/ #include<stdio.h> //printf はここでインクルードして初めて使えるようになる // ここで関数 average を定義 3 つの整数の平均値を返す double 型の関数です double average(int a,int b,int c){ ソフトゼミ A 第 6 回 関数 プログラムは関数の組み合わせでできています 今までのゼミAでも printf や scanf など様々な関数を使ってきましたが なんと関数は自分で作ることもできるのです!! 今日は自作関数を中心に扱っていきます ゲーム制作でも自作関数は避けては通れないので頑張りましょう そもそもまず 関数とは 基本的には 受け取った値に関数によって定められた操作をして その結果の値を返す

More information

2

2 問題 1 次の設問 1~5 に答えよ 設問 1. Java のソースプログラムをコンパイルするコマンドはどれか a) java b) javac c) javadoc d) jdb 設問 2. Java のバイトコード ( コンパイル結果 ) を実行するコマンドはどれか a) java b) javac c) javadoc d) jdb 設問 3. Java のソースプログラムの拡張子はどれか a).c

More information

Microsoft PowerPoint - algo ppt [互換モード]

Microsoft PowerPoint - algo ppt [互換モード] ( 復習 ) アルゴリズムとは アルゴリズム概論 - 探索 () - アルゴリズム 問題を解くための曖昧さのない手順 与えられた問題を解くための機械的操作からなる有限の手続き 機械的操作 : 単純な演算, 代入, 比較など 安本慶一 yasumoto[at]is.naist.jp プログラムとの違い プログラムはアルゴリズムをプログラミング言語で表現したもの アルゴリズムは自然言語でも, プログラミング言語でも表現できる

More information

微分方程式 モデリングとシミュレーション

微分方程式 モデリングとシミュレーション 1 微分方程式モデリングとシミュレーション 2018 年度 2 質点の運動のモデル化 粒子と粒子に働く力 粒子の運動 粒子の位置の時間変化 粒子の位置の変化の割合 速度 速度の変化の割合 加速度 力と加速度の結び付け Newtonの運動方程式 : 微分方程式 解は 時間の関数としての位置 3 Newton の運動方程式 質点の運動は Newton の運動方程式で記述される 加速度は力に比例する 2

More information

#define N1 N+1 double x[n1] =.5, 1., 2.; double hokan[n1] = 1.65, 2.72, 7.39 ; double xx[]=.2,.4,.6,.8,1.2,1.4,1.6,1.8; double lagrng(double xx); main

#define N1 N+1 double x[n1] =.5, 1., 2.; double hokan[n1] = 1.65, 2.72, 7.39 ; double xx[]=.2,.4,.6,.8,1.2,1.4,1.6,1.8; double lagrng(double xx); main =1= (.5, 1.65), (1., 2.72), (2., 7.39).2,.4,.6,.8, 1., 1.2, 1.4, 1.6 1 1: x.2 1.4128.4 1.5372.6 1.796533.8 2.198 1.2 3.384133 1.4 4.1832 1.6 5.1172 8 7 6 5 y 4 3 2 1.5 1 1.5 2 x 1: /* */ #include

More information

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

Taro-プログラミングの基礎Ⅱ(公 0. 目次 2. プログラムの作成 2. 1 コラッツ問題 自然数 n から出発して n が偶数ならば 2 で割り n が奇数ならば 3 倍して 1 を足す操作を行う この操作を繰り返すと最後に 1 になると予想されている 問題 1 自然数 aの操作回数を求めよ 問題 2 自然数 aから bまでのなかで 最大操作回数となる自然数を求めよ 2. 2 耐久数 正整数の各桁の数字を掛け 得られた結果についても同様の操作を繰り返す

More information

データ構造

データ構造 アルゴリズム及び実習 7 馬青 1 表探索 定義表探索とは 表の形で格納されているデータの中から条件に合ったデータを取り出してくる操作である 但し 表は配列 ( 連結 ) リストなどで実現できるので 以降 表 の代わりに直接 配列 や リスト などの表現を用いる場合が多い 表探索をただ 探索 と呼ぶ場合が多い 用語レコード : 表の中にある個々のデータをレコード (record) と呼ぶ フィールド

More information

Microsoft Word - NumericalComputation.docx

Microsoft Word - NumericalComputation.docx 数値計算入門 武尾英哉. 離散数学と数値計算 数学的解法の中には理論計算では求められないものもある. 例えば, 定積分は, まずは積分 ( 被積分関数の原始関数をみつけること できなければ値を得ることはできない. また, ある関数の所定の値における微分値を得るには, まずその関数の微分ができなければならない. さらに代数方程式の解を得るためには, 解析的に代数方程式を解く必要がある. ところが, これらは必ずしも解析的に導けるとは限らない.

More information

C言語演習 基本構造

C言語演習 基本構造 1 変数 関数 宣言 定義 配列 多次元配列 関数と引数 演算子 スコープ 制御構造 条件分岐 条件式 While ループ do-while ループ For ループ 入出力 printf ファイル入出力 2 a 00 x 0 + a 01 x 1 + + a 0n x n = b 0 a 10 x 0 + a 11 x 1 + + a 1n x n = b 1 a (n 1)0 x 0 + a (n

More information

gengo1-11

gengo1-11 関数の再帰定義 自然数 n の階乗 n! を計算する関数を定義してみる 引数は整数 返却値も整数 n! = 1*2*3*... * (n 1)*n である ただし 0! = 1 とする int factorial(int n) int i, tmp=1; if( n>0 ) for(i=1; i

More information

C言語によるアルゴリズムとデータ構造

C言語によるアルゴリズムとデータ構造 Algorithms and Data Structures in C 4 algorithm List - /* */ #include List - int main(void) { int a, b, c; int max; /* */ Ÿ 3Ÿ 2Ÿ 3 printf(""); printf(""); printf(""); scanf("%d", &a); scanf("%d",

More information

JavaプログラミングⅠ

JavaプログラミングⅠ Java プログラミング Ⅰ 11 回目多次元配列 今日の講義で学ぶ内容 2 次元配列とその使い方 不規則な 2 次元配列.length 修飾子 2 次元配列 1 次元配列配列要素が直線的に並ぶ配列です次のように考えると分かりやすいでしょう 2 次元配列配列要素が平面的に並ぶ配列です次のように考えると分かりやすいでしょう 2 次元以上の配列のことを多次元配列といいます 2 次元配列の利用 2 次元配列の利用手順配列変数の宣言

More information

PowerPoint Presentation

PowerPoint Presentation プログラミング基礎 第 2 週 (4,5,6 回 ) 2011-10-07 出村公成 この資料の再配布を禁止します 予定 プログラミング入門 (45 分 ) 変数 入出力 分岐 演習 (90 分 ) タッチタイプ練習 統合開発環境 Codeblocksの使い方 教科書例題の打ち込みと実行 プログラミング入門 C 言語の簡単な例を体験 変数 入出力 分岐 プログラムの例リスト 2.1 改 #include

More information

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

【FdData中間期末過去問題】中学数学2年(連立方程式計算/加減法/代入法/係数決定) FdData 中間期末 : 中学数学 年 : 連立方程式計算 [ 元 1 次方程式 / 加減法 / 代入法 / 加減法と代入法 / 分数などのある連立方程式 / A=B=C, 元連立方程式 / 係数の決定 ] [ 数学 年 pdf ファイル一覧 ] 元 1 次方程式 次の方程式ア~カの中から, 元 1 次方程式をすべて選べ ア y = 6 イ x y = 5 ウ xy = 1 エ x + 5 = 9

More information

2

2 問題 次の設問に答えよ 設問. Java のソースコードをコンパイルするコマンドはどれか a) java b) javac c) javadoc d) javaw 設問. Java のバイトコード ( コンパイル結果 ) を実行するコマンドはどれか a) java b) javac c) javadoc d).jar 設問. Java のソースコードの拡張子はどれか a).c b).java c).class

More information

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

画像ファイルを扱う これまでに学んだ条件分岐, 繰り返し, 配列, ファイル入出力を使って, 画像を扱うプログラムにチャレンジしてみよう 第 14 回 応用 情報処理演習 ( テキスト : 第 10 章 ) 画像ファイルを扱う これまでに学んだ条件分岐, 繰り返し, 配列, ファイル入出力を使って, 画像を扱うプログラムにチャレンジしてみよう 特定色の画素の検出 ( テキスト 134 ページ ) 画像データが保存されているファイルを読み込んで, 特定色の画素の位置を検出するプログラムを作成しなさい 元画像生成画像 ( 結果の画像 )

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション 2018/10/05 竹島研究室創成課題 第 2 回 C 言語演習 変数と演算 東京工科大学 加納徹 前回の復習 Hello, world! と表示するプログラム 1 #include 2 3 int main(void) { 4 printf("hello, world! n"); 5 return 0; 6 } 2 プログラム実行の流れ 1. 作業ディレクトリへの移動 $ cd

More information

プログラミング基礎

プログラミング基礎 C プログラミング 演習 プログラミング基礎 II 演習 II 2012 年 12 月 10 日 第 11 回 今後の予定 2012/12/10 C プログラミング及びプログラミング演習 II 2 2012/12/17 期末試験 (60 分間 ) 場所 :A0542 時間 :4 時限 (15:00~16:00) 2012/12/16 課題の最終提出締切 課題の提出方法 電子メールで提出 提出先 (

More information

第7章 有限要素法のプログラミング

第7章 有限要素法のプログラミング April 3, 2019 1 / 34 7.1 ( ) 2 Poisson 2 / 34 7.2 femfp.c [1] main( ) input( ) assem( ) ecm( ) f( ) solve( ) gs { solve( ) output( ) 3 / 34 7.3 fopen() #include FILE *fopen(char *fname, char

More information

£Ã¥×¥í¥°¥é¥ß¥ó¥°ÆþÌç (2018) - Â裵²ó ¨¡ À©¸æ¹½Â¤¡§¾ò·ïʬ´ô ¨¡

£Ã¥×¥í¥°¥é¥ß¥ó¥°ÆþÌç (2018) - Â裵²ó  ¨¡ À©¸æ¹½Â¤¡§¾ò·ïʬ´ô ¨¡ (2018) 2018 5 17 0 0 if switch if if ( ) if ( 0) if ( ) if ( 0) if ( ) (0) if ( 0) if ( ) (0) ( ) ; if else if ( ) 1 else 2 if else ( 0) 1 if ( ) 1 else 2 if else ( 0) 1 if ( ) 1 else 2 (0) 2 if else

More information