情報学部 菅沼ホーム 全体目次 演習解答例 付録 索引

第11章 プログラム例:数値計算とその周辺

  1. 11.1 はじめに
  2. 11.2 数値計算
    1. (プログラム例 11.1 ) 連立線形方程式,逆行列(ガウス・ジョルダン)
    2. (プログラム例 11.2 ) 非線形方程式(二分法)
    3. (プログラム例 11.3 ) 非線形方程式(セカント法)
    4. (プログラム例 11.4 ) 非線形方程式(ニュートン法)
    5. (プログラム例 11.5 ) 代数方程式(ベアストウ)
    6. (プログラム例 11.6 ) 行列の固有値(フレーム法+ベアストウ法)
    7. (プログラム例 11.7 ) 実対称行列の固有値・固有ベクトル(ヤコビ法)
    8. (プログラム例 11.8 ) 最大固有値と固有ベクトル(べき乗法)
    9. (プログラム例 11.9 ) 数値積分(台形則)
    10. (プログラム例 11.10 ) 数値積分(シンプソン則)
    11. (プログラム例 11.11 ) 微分方程式(ルンゲ・クッタ)
    12. (プログラム例 11.12 ) 補間法(ラグランジュ)
    13. (プログラム例 11.13 ) 補間法(スプライン)
    14. (プログラム例 11.14 ) 補間法(ベジエ曲線)
  3. 11.3 最適化
    1. (プログラム例 11.15 ) 最適化(線形計画法)
    2. (プログラム例 11.16 ) 最適化(黄金分割法)
    3. (プログラム例 11.17 ) 最適化(多項式近似法)
    4. (プログラム例 11.18 ) 最適化(最急降下法)
    5. (プログラム例 11.19 ) 最適化(共役勾配法)
    6. (プログラム例 11.20 ) 最適化( Newton 法)
    7. (プログラム例 11.21 ) 最適化(準 Newton 法)
    8. (プログラム例 11.22 ) 最適化(シンプレックス法)
    9. (プログラム例 11.23 ) 最適化(動的計画法)
    10. (プログラム例 11.24 ) 巡回セールスマン問題(分割法)
    11. (プログラム例 11.25 ) 巡回セールスマン問題(逐次改善法)
    12. (プログラム例 11.26 ) 遺伝的アルゴリズム( TSP,関数の最大値への応用)
  4. 11.4 確率と統計
    1. (プログラム例 11.27 ) ガンマ関数
    2. (プログラム例 11.28 ) 二項分布
    3. (プログラム例 11.29 ) ポアソン分布
    4. (プログラム例 11.30 ) 一様分布
    5. (プログラム例 11.31 ) 指数分布
    6. (プログラム例 11.32 ) 正規分布
    7. (プログラム例 11.33 ) χ2 分布
    8. (プログラム例 11.34 ) t 分布
    9. (プログラム例 11.35 ) F 分布
    10. (プログラム例 11.36 ) Fisher の直接確率
  5. 11.5 モンテカルロ法
    1. (プログラム例 11.37 ) 乱数の発生
    2. (プログラム例 11.38 ) 待ち行列(簡単な例)
    3. (プログラム例 11.39 ) 待ち行列(複雑な例)
  6. 11.6 多変量解析
    1. (プログラム例 11.40 ) 最小二乗法
    2. (プログラム例 11.41 ) 重回帰分析
    3. (プログラム例 11.42 ) 正準相関分析
    4. (プログラム例 11.43 ) 主成分分析
    5. (プログラム例 11.44 ) 因子分析
    6. (プログラム例 11.45 ) クラスター分析
    7. (プログラム例 11.46 ) 分散分析
  7. 11.7 ニューラルネットワーク
    1. (プログラム例 11.47-0 ) Hopfield ネットワーク
    2. (プログラム例 11.47 ) パーセプトロン学習
    3. (プログラム例 11.48 ) Winner-Take-All
    4. (プログラム例 11.49 ) 競合学習
    5. (プログラム例 11.50 ) バックプロパゲーション
  8. 11.8 その他
    1. (プログラム例 11.51 ) ファジイ推論
    2. (プログラム例 11.52 ) 伝達関数(ゲインと位相の計算)

11.1 はじめに

  プログラム例 7.11に述べたように,場合によっては,メソッドにメソッド名を引数としたい場合があります.この章で紹介するいくつかの例においても同様です.しかし,Java においては,ポインタが明示的に定義されていないため,C/C++ と全く同じ方法では不可能です.そこで,ここでは,プログラム例 7.11 における 2 番目の方法のように,メソッド名を引数として渡す代わりに,f(x) の値やその微分値を計算するクラス Kansu が,ニュートン法などのメソッドを継承することによって,メソッド名を引き渡すことにします.

  画面上でそのまま実行できるように,いくつかの例に対して JavaScript による記述も併記しています.また,プログラム例によっては,Window 生成や描画機能を使用している場合があります.それらのプログラムに関しては,第Ⅳ部を学習してから再度読んでみて下さい.

11.2 数値計算

(プログラム例 11.1 ) 連立線形方程式,逆行列(ガウス・ジョルダン) 

  プログラムは,連立線形方程式の解(逆行列)をガウスの消去法によって求めた例です.JavaScript 版では,任意のデータに対して画面上で結果を得ることができます.なお,JavaScript 版では,連立方程式の解,逆行列,行列の乗算,及び,行列式の値を計算することが可能になっています.

(プログラム例 11.2 ) 非線形方程式(二分法) 

  プログラムは,f(x) = exp(x) - 3x = 0 の根を二分法で求めた例です.JavaScript 版では,JavaScript の仕様に適合した形で解を求めたい式を入力することによって,任意の非線形方程式の解を画面上で求めることができます.

(プログラム例 11.3 ) 非線形方程式(セカント法) 

  プログラムは,f(x) = exp(x) - 3x = 0 の根をセカント法で求めた例です.JavaScript 版では,JavaScript の仕様に適合した形で解を求めたい式を入力することによって,任意の非線形方程式の解を画面上で求めることができます.

(プログラム例 11.4 ) 非線形方程式(ニュートン法) , (多次元:  )

  プログラムは,f(x) = exp(x) - 3x = 0 の根をニュートン法で求めた例です.多次元の場合に対するプログラムは,3 点 (0.5,1.0),(0.0,1.5),(0.5,2.0) を通る円の中心座標と半径を多次元のニュートン法で求めた例です.JavaScript 版(多次元の場合に対する JavaScript 版)では,JavaScript の仕様に適合した形で解を求めたい式を入力することによって,任意の非線形方程式の解を画面上で求めることができます.

(プログラム例 11.5 ) 代数方程式(ベアストウ) 

  プログラムは,実係数代数方程式 (x + 1)(x - 2)(x - 3)(x2 + x + 1) = 0 の解を,ベアストウ法で求めた例です.JavaScript 版では,任意のデータに対して画面上で解を得ることができます.

(プログラム例 11.6 ) 行列の固有値(フレーム法+ベアストウ法) 

  プログラムは,行列の固有値をフレーム法とベアストウ法によって求めるためのものです.JavaScript 版では,任意のデータに対して画面上で解を得ることができます.

(プログラム例 11.7 ) 実対称行列の固有値・固有ベクトル(ヤコビ法) 

  プログラムは,実対称行列の固有値及び固有ベクトルを,ヤコビ法で求めるためのものです.JavaScript 版では,任意のデータに対して画面上で解を得ることができます.各固有値に対応する固有ベクトルは,各列に表示されます.

(プログラム例 11.8 ) 最大固有値と固有ベクトル(べき乗法) 

  プログラムは,行列の固有値と固有ベクトルを,固有値の絶対値が最大のものから順に求めていく方法(べき乗法)です.JavaScript 版では,任意のデータに対して画面上で解を得ることができます.

(プログラム例 11.9 ) 数値積分(台形則) 

  プログラムは,台形則により sin(x) を 0 から π/2 までの積分するプログラム例です.シンプソン則による方法と比較してみてください.JavaScript 版では,JavaScript の仕様に適合した形で積分したい式を入力することによって,任意の関数の積分を画面上で求めることができます.

(プログラム例 11.10 ) 数値積分(シンプソン則) 

  プログラムは,シンプソン則により sin(x) を 0 から π/2 までの積分するプログラム例です.JavaScript 版では,JavaScript の仕様に適合した形で積分したい式を入力することによって,任意の関数の積分を画面上で求めることができます.

(プログラム例 11.11 ) 微分方程式(ルンゲ・クッタ) 

  プログラムは,以下の微分方程式をルンゲ・クッタ法によって,0 から 1 秒まで解いた例です.JavaScript 版では,JavaScript の仕様に適合した形で微分方程式を入力することによって,任意の微分方程式の解を画面上で求めることができます.

  d2y/dt2 + 3dy/dt + 2y = 1  初期条件はすべて0
  (x[0] = y, x[1] = dy/dt)

(プログラム例 11.12 ) 補間法(ラグランジュ) 

  プログラムは,ラグランジュ補間法のプログラムです.JavaScript 版では,n 次補間多項式による計算結果を画面上で求めることができます.

(プログラム例 11.13 ) 補間法(スプライン) 

  プログラムは,3次スプライン関数によってスプライン補間するためのものです.JavaScript 版では,任意のデータに対して,スプライン補間法による計算結果を画面上で求めることができます.

(プログラム例 11.14 ) 補間法(ベジエ曲線) 

  プログラムは,ベジエ多角形を B0 = (1 1),B1 = (2 3),B2 = (4 3),B3 = (3 1) としたとき,対応するベジエ曲線を描くためのものです.JavaScript 版では,任意のデータに対して,ベジエ曲線上の座標を画面上に出力することができます.

11.2 最適化

(プログラム例 11.15 ) 最適化(線形計画法) 

  プログラムは,線形計画法に対するプログラム例です.実行に関しては,使用方法を参考にしてください.JavaScript 版では,画面上で実行することができます.

(プログラム例 11.16 ) 最適化(黄金分割法) 

  プログラムは,f(x) = x4 + 3x3 + 2x2 + 1 の最小値を黄金分割法で求めた例です.JavaScript 版では,JavaScript の仕様に適合した形で最小値を求めたい式を入力することによって,任意の関数の最小値を画面上で求めることができます.

(プログラム例 11.17 ) 最適化(多項式近似法) 

  プログラムは,f(x) = x4 + 3x3 + 2x2 + 1 の最小値を多項式近似法で求めた例です.JavaScript 版では,JavaScript の仕様に適合した形で最小値を求めたい式を入力することによって,任意の関数の最小値を画面上で求めることができます.

(プログラム例 11.18 ) 最適化(最急降下法) 

  プログラムは,最急降下法を使用して,非線形関数の最小値を求めるためのものです( C/C++ 及び Java によるプログラムの使用方法).JavaScript 版では,JavaScript の仕様に適合した形で最小値を求めたい式を入力することによって,任意の関数の最小値を画面上で求めることができます.

(プログラム例 11.19 ) 最適化(共役勾配法) 

  プログラムは,共役勾配法を使用して,非線形関数の最小値を求めるためのものです( C/C++ 及び Java によるプログラムの使用方法).JavaScript 版では,JavaScript の仕様に適合した形で最小値を求めたい関数を入力することによって,任意の関数の最小値を画面上で求めることができます.

(プログラム例 11.20 ) 最適化(Newton 法) 

  プログラムは,Newton 法を使用して,非線形関数の最小値を求めるためのものです( C/C++ 及び Java によるプログラムの使用方法).JavaScriptj 版では,JavaScript の仕様に適合した形で最小値を求めたい関数を入力することによって,任意の関数の最小値を画面上で求めることができます.

(プログラム例 11.21 ) 最適化(準 Newton 法) 

  プログラムは,準 Newton 法を使用して,非線形関数の最小値を求めるためのものです( C/C++ 及び Java によるプログラムの使用方法).JavaScript 版では,JavaScript の仕様に適合した形で最小値を求めたい関数を入力することによって,任意の関数の最小値を画面上で求めることができます.

(プログラム例 11.22 ) 最適化(シンプレックス法) 

  プログラムは,シンプレックス法を使用して,非線形関数の最小値を求めるためのものです( C/C++ 及び Java によるプログラムの使用方法).JavaScript 版では,JavaScript の仕様に適合した形で最小値を求めたい関数を入力することによって,任意の関数の最小値を画面上で求めることができます.

(プログラム例 11.23 ) 最適化(動的計画法) 

  プログラムは,動的計画法を使用して,資源配分問題,0-1 ナップザック問題,及び,グラフ上の最短経路問題を解くためのものです.JavaScript 版では,画面上で実行することが可能です.

(プログラム例 11.24 ) 巡回セールスマン問題(分割法) 

  プログラムは,巡回セールスマン問題( TSP )を分割法によって解くためのものです.

(プログラム例 11.25 ) 巡回セールスマン問題(逐次改善法) 

  プログラムは,巡回セールスマン問題( TSP )を逐次改善法によって解くためのものです.

(プログラム例 11.26 ) 遺伝的アルゴリズム( TSP,関数の最大値への応用)

    [巡回セールスマン問題] 

      添付したプログラムは,巡回セールスマン問題( TSP )を遺伝的アルゴリズムによって解くためのものです.

    [関数の最大値] 

      遺伝的アルゴリズムの基本事項を定義したクラス Species は,巡回セールスマン問題だけに適用できるわけではありません.後一つの例として,関数,

    f(x) = sin(3*x) + 0.5 * sin(9*x) + sin(15*x+50)

    の [0, 1] 区間における最大値を求めるためのプログラム(クラス Species は省略)を添付しておきます.

11.4 確率と統計

(プログラム例 11.27 ) ガンマ関数 

  プログラムは,ガンマ関数の値を計算するためのものです.JavaScript 版では,任意のデータに対するガンマ関数の値を画面上で求めることができます.

(プログラム例 11.28 ) 二項分布 

  プログラムは,グラフ出力を指定すると,ベルヌーイ試行を n 回行い,0 ~ n 回成功する場合に対する二項分布の密度関数および分布関数の値をファイルに出力すると共に,Java 版では,グラフも表示します.また,グラフ出力を指定しないと,指定された値における密度関数および分布関数の値を出力します.JavaScript 版では,同様の処理を画面上で実行することが可能であり,結果はテキストエリアに出力されると共に,「確率(複数点)」を選択すればグラフも表示されます.なお,グラフに関しては,13.4.2 節を参照して下さい.

(プログラム例 11.29 ) ポアソン分布 

  プログラムは,グラフ出力を指定するとポアソン分布の密度関数および分布関数の値を指定した範囲だけファイルに出力します.また,グラフ出力を指定しないと,指定された値における密度関数および分布関数の値を出力します.Java 版ではグラフも表示されます.JavaScript 版では,同様の処理を画面上で実行することが可能であり,結果はテキストエリアに出力されると共に,「確率(複数点)」を選択すればグラフも表示されます.なお,グラフに関しては,13.4.2 節を参照して下さい.

(プログラム例 11.30 ) 一様分布 

  プログラムは,グラフ出力を指定すると一様分布の密度関数および分布関数の値を指定した範囲だけファイルに出力します.また,グラフ出力を指定しないと,指定された値における密度関数および分布関数の値,または,%値を出力します.Java 版ではグラフも表示されます.JavaScript 版では,同様の処理を画面上で実行することが可能であり,結果はテキストエリアに出力されると共に,「確率(複数点)」を選択すればグラフも表示されます.なお,グラフに関しては,13.4.2 節を参照して下さい.

(プログラム例 11.31 ) 指数分布 

  プログラムは,グラフ出力を指定すると指数分布の密度関数および分布関数の値を指定した範囲だけファイルに出力します.また,グラフ出力を指定しないと,指定された値における密度関数および分布関数の値,または,%値を出力します.Java 版ではグラフも表示されます.JavaScript 版では,同様の処理を画面上で実行することが可能であり,結果はテキストエリアに出力されると共に,「確率(複数点)」を選択すればグラフも表示されます.なお,グラフに関しては,13.4.2 節を参照して下さい.

(プログラム例 11.32) 正規分布 

  プログラムは,グラフ出力を指定すると正規分布の密度関数および分布関数の値を指定した範囲だけファイルに出力します.また,グラフ出力を指定しないと,指定された値における密度関数および分布関数の値,または,%値を出力します.Java 版ではグラフも表示されます.JavaScript 版では,同様の処理を画面上で実行することが可能であり,結果はテキストエリアに出力されると共に,「確率(複数点)」を選択すればグラフも表示されます.なお,グラフに関しては,13.4.2 節を参照して下さい.

(プログラム例 11.33 ) χ2 分布 

  プログラムは,グラフ出力を指定すると χ2 分布の密度関数および分布関数の値を指定した範囲だけファイルに出力します.また,グラフ出力を指定しないと,指定された値における密度関数および分布関数の値,または,%値を出力します.Java 版ではグラフも表示されます.JavaScript 版では,同様の処理を画面上で実行することが可能であり,結果はテキストエリアに出力されると共に,「確率(複数点)」を選択すればグラフも表示されます.なお,グラフに関しては,13.4.2 節を参照して下さい.

(プログラム例 11.34 ) t 分布 

  プログラムは,グラフ出力を指定すると t 分布の密度関数および分布関数の値を指定した範囲だけファイルに出力します.また,グラフ出力を指定しないと,指定された値における密度関数および分布関数の値,または,%値を出力します.Java 版ではグラフも表示されます.JavaScript 版では,同様の処理を画面上で実行することが可能であり,結果はテキストエリアに出力されると共に,「確率(複数点)」を選択すればグラフも表示されます.なお,グラフに関しては,13.4.2 節を参照して下さい.

(プログラム例 11.35 ) F 分布 

  プログラムは,グラフ出力を指定すると F 分布の密度関数および分布関数の値を指定した範囲だけファイルに出力します.また,グラフ出力を指定しないと,指定された値における密度関数および分布関数の値,または,%値を出力します.Java 版ではグラフも表示されます.JavaScript 版では,同様の処理を画面上で実行することが可能であり,結果はテキストエリアに出力されると共に,「確率(複数点)」を選択すればグラフも表示されます.なお,グラフに関しては,13.4.2 節を参照して下さい.

(プログラム例 11.36) Fisher の直接確率 

  プログラムは,Fisher の直接確率を計算する例です.

11.5 モンテカルロ法

(プログラム例 11.37) 乱数の発生 

  プログラムは,一様乱数,指数乱数,および,正規乱数の発生方法の例です.

  なお,C++11 の場合は,メルセンヌ・ツイスタ法を使用した乱数生成関数が,標準ライブラリ内に含まれています.さらに,標準ライブラリ内には,ベルヌーイ分布乱数,二項分布乱数,幾何分布乱数,負の二項分布乱数一様分布乱数ポワソン分布乱数,指数分布乱数,ガンマ分布乱数,ワイブル分布乱数,極値分布乱数正規分布乱数,対数正規分布乱数,カイ二乗分布乱数,コーシー分布乱数,フィッシャーの F 分布乱数,ステューデントの t 分布乱数確率分布生成器,重み付き確率分布生成器,線形重み付き確率分布生成器を生成する関数も含まれています.

(プログラム例 11.38 ) 待ち行列(簡単な例) 

  プログラムは,待ち行列が 1 つで,かつ,サービス窓口の数が s (任意)であるような非常に簡単な待ち行列モデル

をシミュレーションするためのものです.客の到着やサービスの分布は,すべて指数分布となっています(修正は,非常に簡単だと思います).また,JavaScript 版では,画面上でシミュレーションを実行し,結果を得ることができます.なお,実行結果のカッコ内の値は,対応する項目に対する理論値です.

(プログラム例 11.39 ) 待ち行列(複雑な例) 

  プログラムは,プログラム例 11.38 より複雑な待ち行列モデル

をシミュレーションするためのものです.入力データによって,様々な構造のモデルに対するシミュレーションも可能です.また,到着時間に関しては,(指数分布,一定時間間隔,客の人数と到着時間の指定)の中から,また,サービス時間に関しては,(指数分布,一定時間)の中から選択可能です.プログラムの最後に,上の図に示したモデルをシミュレーションするための入力例,及び,最初に示した簡単な例に対する入力例が与えてあります.

  JavaScript 版では,画面上でシミュレーションを実行し,結果を得ることができます.初期設定の状態は,上の図に示したモデルをシミュレーションするためのものです.入り口,待ち行列,窓口の数などを変えれば(変更して,その位置に対するフォーカスを外せば),対応した状態が表示されます.なお,入り口,待ち行列,及び,窓口数の最大値は 10 に設定してありますが,ファイル complex.htm の 11 ~ 13 行目を修正することによって,容易に変更可能です.

11.6 多変量解析

(プログラム例 11.40 ) 最小二乗法(多項式近似) 

  プログラムは,最小二乗法(多項式近似)を実行するためのものです.データの入力方法に関しては,プログラムの最後に提示してある入力例に対する説明を参考にして下さい.JavaScript 版では,任意のデータに対して画面上で実行することができます.

(プログラム例 11.41 ) 重回帰分析 

  プログラムは,重回帰分析を行うためのものです.データの入力方法に関しては,プログラムの最後に提示してある入力例に対する説明を参考にして下さい.JavaScript 版では,任意のデータに対して画面上で実行することができます.

(プログラム例 11.42 ) 正準相関分析 

  プログラムは,正準相関分析を行うためのものです.データの入力方法に関しては,プログラムの最後に提示してある入力例に対する説明を参考にして下さい.JavaScript 版では,任意のデータに対して画面上で実行することができます.

(プログラム例 11.43 ) 主成分分析 

  プログラムは,主成分分析を行うためのものです.データの入力方法に関しては,プログラムの最後に提示してある入力例に対する説明を参考にして下さい.JavaScript 版では,任意のデータに対して画面上で実行することができます.

(プログラム例 11.44 ) 因子分析 

  プログラムは,因子分析を行うためのものです.データの入力方法に関しては,プログラムの最後に提示してある入力例に対する説明を参考にして下さい.JavaScript 版では,任意のデータに対して画面上で実行することができます.

(プログラム例 11.45 ) クラスター分析 

  プログラムは,クラスター分析を行うためのものです.データの入力方法に関しては,プログラムの最後に提示してある入力例に対する説明を参考にして下さい.JavaScript 版では,任意のデータに対して画面上で実行することができます.

(プログラム例 11.46 ) 分散分析 

  プログラムは,分散分析を行うためのものです.データの入力方法に関しては,プログラムの最後に提示してある入力例に対する説明を参考にして下さい.JavaScript 版では,任意のデータに対して画面上で実行することができます.

11.7 ニューラルネットワーク

(プログラム例 11.47-0 ) ニューラルネットワーク( Hopfield ネットワーク)

  添付したプログラムC/C++ の場合)は,Hopfield ネットワークを使用して,連想記憶を扱った例です.また,プログラムC/C++ の場合)は,Hopfield ネットワークを使用して,4 都市に対する巡回セールスマン問題( TSP )を扱った例です.JavaScript 版(連想記録,および,TSP)では,画面上で実行可能です.

(プログラム例 11.47 ) パーセプトロン学習 

  プログラムは,p 個の入力ユニットと 1 個の出力ユニットからなるニューラルネットワークに対してパーセプトロン学習を行います.JavaScript 版では,画面上で実行可能です.なお,テキストエリアに表示されたデータの意味については,C++,または,Javaのプログラムに対する説明を参照してください.

(プログラム例 11.48 ) Winner-Take-All 

  プログラムは,p 個の入力ユニットと o 個の出力ユニットからなる Winner-Take-All ニューラルネットワークに対する学習を行います.Winner-Take-All ニューラルネットワークとは,出力ユニットの内,最大の出力を持つユニットだけが発火することによって,与えられたデータを分類しようとするものです.JavaScript 版では,画面上で実行可能です.なお,テキストエリアに表示されたデータの意味については,C++,または,Javaのプログラムに対する説明を参照してください.

(プログラム例 11.49 ) 競合学習 

  プログラムは,与えられた n 個のパターンを競合学習という教師無しの方法で分類するためのものです(入力ユニット数: p,出力ユニット数: o ).JavaScript 版では,画面上で実行可能です.なお,テキストエリアに表示されたデータの意味については,C++,または,Javaのプログラムに対する説明を参照してください.

(プログラム例 11.50 ) バックプロパゲーション 

  プログラムは,任意の構造のネットワークをバックプロパゲーション法によって学習するためのものです.JavaScript 版では,画面上で実行可能です.なお,テキストエリアに表示されたデータの意味については,C++,または,Javaのプログラムに対する説明を参照してください.

11.8 その他

(プログラム例 11.51 ) ファジイ推論 

  プログラムは,以下に示すような m 個の変数を使用した n 個の規則を基にしてファジイ推論を行うものです.JavaScript 版では,画面上で実行することが可能です.テキストエリア内のデータの意味に関しては,C++,または,Java のプログラムに対する説明を参照してください.

if x1 = A11, x2 = A12, ・・・ ,xm=A1m then y = B1
if x1 = A21, x2 = A22, ・・・ ,xm=A2m then y = B2
        ・・・・・・・・・・・・・
if x1 = An1, x2 = An2, ・・・ ,xm=Anm then y = Bn

(プログラム例 11.52 ) 伝達関数(ゲインと位相の計算) 

  プログラムは,伝達関数からボード線図を作成するのに必要なゲインと位相を計算するためのものです.なお,Java 版や JavaScript 版では,グラフを表示することも可能であると共に,「式の数」を指定することによって複数のボード線図を同じ画面に描くことが可能です.JavaScript 版では,式の数(グラフの数)や次数に制限をかけていますが(最大の式の数:5,最大次数:10 ),プログラム内の変数 max_g や max_order の値を変えることによって容易に変更できます.なお,グラフに関しては,13.4.2 節を参照して下さい.

情報学部 菅沼ホーム 全体目次 演習解答例 付録 索引