01:csvファイル入出力サンプル
概要(プログラム:vbFTEST, vcsFTEST, gccFTEST)
- csv ファイルの入出力サンプルプログラムです.
- VB・C# ではパスの分解機能のテストも行っており,結果は下表の通りです.
- 下表は VB のコマンドですが,C# では行末にセミコロン(;)をつけます.
パスの分解 | VBコマンド | 実行結果 |
フルパス | dat = fnameR | C:\vb2010pro\vb0FTEST\inpTEST.csv |
パス名 | dat = System.IO.Path.GetDirectoryName(fnameR) | C:\vb2010pro\vb0FTEST |
ファイル名 | dat = System.IO.Path.GetFileName(fnameR) | inpTEST.csv |
拡張子無しファイル名 | dat = System.IO.Path.GetFileNameWithoutExtension(fnameR) | inpTEST |
拡張子 | dat = System.IO.Path.GetExtension(fnameR) | .csv (ピリオド含む) |
使用コントロール
ToolStrip1(Button1), TextBox1, OenFileDialog1, SaveFileDialog1
プログラムリスト
入出力事例
02:コントロールへの書き込みテスト
概要(プログラム:vbWTEST, vcsWTEST)
- DataGridView, ListView, ListBox, TextBox への書き込みテストプログラムです.
- それぞれのコントロールに書き込むときのコードサンプルとして作成したものです.
- 書き込むデータは,FolderBrowserDialog で選定したフォルダ内のファイル情報です.
- 書き出される情報はファイル情報のみでフォルダの情報は取得されません.
- Form 以外のコントロールは,全てコードでフォームに追加しています.
- ToolStripButton のコードによる配置方法が解りませんでしたが,DOBON.NET さんのページ(http://dobon.net/vb/dotnet/control/tsbeginning.html)を見て解決しました.
使用コントロール
ToolStrip1(Button1), Label1〜4,DataGridView, ListView, ListBox, TextBox, FolderBrowserDialog
プログラムリスト
03:画像出力サンプル
概要(プログラム:vbGTEST, vcsGTEST)
画像出力サンプルプログラムです.文字列の傾斜描画のテストも行っています.出力画像は png 形式です.
使用コントロール
ToolStrip1(Button1), PictureBox1, SaveFileDialog1
プログラムリスト
入出力事例
04:フォルダ内テキスト文書文字列一括置換
概要(プログラム:vbREPL, vcsREPL)
- 選択した拡張子を持つフォルダ内テキスト文書において,一括置換を行います.
- html のタグを一括して変更したい場合があり,このために作成したものです.
- 使い方は以下の通りです.
- ToolStrip の ComboBox で検索ファイルの拡張子を指定します.
- TextBox1 および TextBox2 に検索文字列および置換文字列を入力します.1回で置換できる文字列は1つです.
- ToolStrip の [Start] ボタンを押し,置換したいファイルがあるフォルダを選択します.
- ToolStrip の [置換] ボタンを押すと選択フォルダ内全ファイルで置換が行われます.
- 処理が終了すると MessageBox が完了を知らせます.
使用コントロール
ToolStrip1(Button1,ToolStripComboBox1,Buton2),StatusStrip1(ToolStripStatusLabel1),FolderBrowserDialog1,Label1〜3,ListBox1,TextBox1〜3
プログラムリスト
05:指定拡張子ファイル名列挙
概要(プログラム:vbFNAME, vcsFNAME, gccFNAME)
- 指定拡張子のファイル名を列挙するサンプルプログラムです.
- 結果をファイル出力する機能もつけてみました.
- C のプログラムでは DOS コマンド:dir の結果をそのまま出力しています.
- 出力結果は以下の通りです(拡張子に「csv」を指定した例).
01| C:\vb2010pro\vb2MRA\data-file,4
02| inpMRA2.csv
03| inpMRA5.csv
04| outMRA2.csv
05| outMRA5.csv
|
- 01行目:フォルダパス,ファイル数
- 02〜5行目:指定拡張子のファイル名
使用コントロール
ToolStrip1(Button1〜2), TableLayoutPanel1, Label1〜3, TextBox1〜2, ListBox1, FolderBrowserDialog1, SaveFileDialog1
プログラムリスト
06:連立一次方程式(Gauss-Jordan法)
概要(プログラム:vbGJMAT, vcsGJMAT, gccGJMAT)
- Gauss-Jordan 法により連立一次方程式を解くプログラムです.
- 基本ルーチンは河西朝雄さんの「C 言語によるはじめてのアルゴリズム入門」記載のCコードを VB および C# で Call できる形に書き直したものです.
- [A]{x} = {y} なる連立一次方程式において [a] = [A | y] を入力することにより,解 {x} を得ています.
- 例題では係数 [A] が 3×3 の行列であるため, n=2 として, [a] の配列宣言は a(n, n+1) となり,解は {x(i)} = a(i, n+1) に格納しています.ここに,i = 0, 1, 2 であり,答えは {x} = {2, -1, 3} です.
- 本HPの事例では,Gauss-Jordan 法は重回帰分析における連立一次方程式の解法に用いています.
使用コントロール
ToolStrip1(Button1)
プログラムリスト
07:逆行列(Gauss-Jordan法)
概要(プログラム:vbINVMAT, vcsINVMAT, gccINVMAT)
- Gauss-Jordan 法により逆行列を計算するプログラムです.
- 基本ルーチンは,山田嘉昭著「有限要素法の基礎と応用シリーズ2 マトリックス法材料力学」掲載の FORTRAN コードを VB および C# で Call できる形で書き直したものです.
- 配列要素は 1 からとしており,添字 0 の要素は使用していません.
使用コントロール
ToolStrip1(Button1)
プログラムリスト
08:実対称行列固有値計算(JACOBI法)
概要(プログラム:vbJACOBI, vcsJACOBI, gccJACOBI)
- JACOBI 法により実対称行列の固有値・固有ベクトルを算定し,大きい順に並べて出力するプログラムです.
- 基本ルーチンは奥村晴彦先生の「パソコンによるデータ解析入門 数理とプログラミング実習」掲載の N88-BASIC(86) コードを VB および C# で Call できる形で書き直したものです.
- 例題は3×3の行列であるため,3個の固有値とそれらに対応する固有ベクトルが得られます.
- 本 HP の事例では,JACOBI 法は主成分分析での固有値計算に用いています.
使用コントロール
ToolStrip1(Button1)
プログラムリスト
09:実対称行列固有値計算(一般化JACOBI法)
概要(プログラム:vbGJACOBI, vcsGJACOBI, gccGJACOBI)
- 一般化 JACOBI 法により実対称行列の固有値・固有ベクトルを算定し,大きい順に並べて出力するプログラムです.
- [A]{x}=λ[B]{x} なる形で与えられた問題に対応します.
- 基本ルーチンは,宮沢健二著「パソコン構造力学--力学挙動の可視化--」掲載の N88-BASIC(86) コードを VB および C# で Call できる形で書き直したものです.
- 配列要素は 1 からとしており,添字 0 の要素は使用していません.
使用コントロール
ToolStrip1(Button1)
プログラムリスト
10:実数計算による高速フーリエ変換・逆変換(実数FFT)
概要(プログラム:vbFFT, vcsFFT, gccFFT)
- 処理の流れは以下の通りです.
- (1) データ読み込み
- (2) データ数を2の階乗個に再セット(後続の0付加)
- (3) フーリエ変換
- (4) 変換値記憶
- (5) 逆変換
- (6) 出力
- VB プログラムはフローの制御部と高速フーリエ変換・逆変換用の Sub プロシージャ FFT からなります.C# についても同様です.
- フーリエ変換時は,Sub プロシージャ FFT からの出力値をデータ数で除すこと,逆変換を行うためには Sub プロシージャ FFT を Call する前に虚数部の符号を逆転させておくことに注意します.
- 高速フーリエ変換のプログラムは多くのものが存在しますが,複素演算ができる環境なら大崎順彦先生の著書「新・地震動のスペクトル解析入門」に FORTRAN で書かれたコンパクトなプログラムが掲載されており参考になります.
- VB での複素演算の方法は知らないので,ここでは南茂夫先生の「科学計測のための波形データ処理 計測システムにおけるマイコン/パソコン活用技術」に掲載されている実数演算による BASIC プログラムを,VB および C# で Call できる形で書き直しています.
- 原プログラムはデータ個数が8個の場合など,あるケースで無限ループに陥る場合があることから,この部分に対する修正を行っています.
- VB プログラムでは「Option Explicit On」,「Option Strict On」で全変数で型宣言を行っています.
- gcc を通す C のプログラムを作っていたところ,入力データ数が多くなると FFT の結果がおかしくなることに気づき,調べていたら,FFT サブルーチンの中で,演算数を定めるパラメータ「m」が桁落ちを起こしていることがわかりました.
- VB や C# では特に問題なかったのですが,一応以下のように修正しました(式は C の文法で記載しています).
整数化する前に「1を足す」ということろがミソです.
変更前:m=(int)(log((double)n)/log(2.0)); → 変更後:m=(int)(log((double)n)/log(2.0)+1.0);
|
- 本HPの入力データ(1)の事例は,前出,大崎先生の著書で「例題波」として掲載されているものを入力データとしたものを使わせていただきました.
- 入力データ(2)は地震動のサンプル波を処理しています.実行画面では VB プログラムの練習として ListView にデータを表示する部分を付加していますが,本質的な意味を持つものではありません.
- 入力データファイル(csv 形式)の並びは以下の通り.
01 | 例題波
02 | dt,1.0
03 | ndata,16
04 | 5
05 | 32
06 | 38
07 | -33
08 | -19
09 | -10
10 | 1
11 | -8
12 | -20
13 | 10
14 | -1
15 | 4
16 | 11
17 | -1
18 | -7
19 | -2
|
- 01行:コメント
- 02行:サンプリングピッチ(文字列dtはダミー)
- 03行:データ数(文字列ndataはダミー)
- 04行:サンプリングデータ・・・以降データ数分繰り返し
- サンプルデータ(1)では16点からなる時刻歴波形をフーリエ変換した後,逆変換を行って入力波形時刻歴の再現性を確認しています.
- サンプルデータ(2)では800点からなる時刻歴波形をフーリエ変換した後,逆変換を行って入力波形時刻歴の再現性を確認しています.
- 出力ファイルには FFT のために付加した「後続の0」を含む入力値と計算出力値が格納されます.
使用コントロール
ToolStrip1(Button1),ListView1,OpenFileDialog1,SaveFileDialog1
プログラムリスト
入出力事例
11:複素数計算による高速フーリエ変換・逆変換(複素数FFT)
概要(プログラム:vbCFFT, vcsCFFT, gccCFFT)
- FFT のプログラムは,大崎順彦先生の著書「新・地震動のスペクトル解析入門」掲載の FORTRAN プログラムを,複素数演算を行う関数を作成し VB 化および C# 化したものです(go to文はブロックIF文[VBでこの言い方はいいのかな?]や Do〜LOOP 文に書き換えています).
- VB プログラムは複素数計算を行うための構造体宣言と Function プロシージャ,フローの制御部と高速フーリエ変換・逆変換用の Sub プロシージャ CFFT からなります.C# もこれに準じています.
- 処理の流れは以下の通りです.
- (1) データ読み込み
- (2) データ数を2の階乗個に再セット(後続の0付加)
- (3) フーリエ変換
- (4) 変換値記憶
- (5) 逆変換
- (6) 出力
- フーリエ変換時は,Sub プロシージャ CFFT からの出力値をデータ数で除すことに注意します.
- 逆変換時は特に処理は必要ありません.
- 入力データ(1)の事例は,前出,大崎先生の著書で「例題波」として掲載されているものを入力データとしたものを使わせていただきました.
- 入力データ(2)は地震動のサンプル波を処理しています.
- 実行画面では VB プログラムの練習として ListView にデータを表示する部分を付加していますが,本質的な意味を持つものではありません.
- 入力データファイル・出力データファイル(csv 形式)の並びは実数演算によるフーリエ変換プログラムと同一です.
- サンプルデータ(1)では16点からなる時刻歴波形をフーリエ変換した後,逆変換を行って入力波形時刻歴の再現性を確認しています.
- サンプルデータ(2)では800点からなる時刻歴波形をフーリエ変換した後,逆変換を行って入力波形時刻歴の再現性を確認しています.
- 出力ファイルには FFT のために付加した「後続の0」を含む入力値と計算出力値が格納されます.
使用コントロール
Button1,ListView1,OpenFileDialog1,SaveFileDialog1
プログラムリスト
入出力事例
12:複素数計算のための関数
概要(プログラム:vbCOMP, vcsCOMP, gccCOMP)
- VB で複素数を用いた計算ができないかと調べていましたが,妙案が無く,とりあえず思いついたのがこの方法です.
- 複素数演算は,構造体で複素数の実数部と虚数部を定義し,Function プロシージャで,実数部と虚数部に分けて演算を行い,構造体に保存するようにしています.
- 加減乗除は複素数計算の公式を用いており,平方根や exp 関数,三角関数などは複素平面の考え方を用い極座標で演算を行っています.
- プログラムとして美しいかは別として,どうしても複素数を使いたい場合は,「こうすれば使える!」という考え方で作成しました.
- 高速フーリエ変換や地盤の地震応答計算など複素数を用いた計算に,いくつかの関数を選択して用いています.
- 複素数を扱うための構造体は以下のようなものであり,1つの変数名に,実数部(Real)と虚数部(Imag)を記憶させています.C#プログラムも同様の考え方で,文法をC#に合わせたのみです.
Private Structure Complex
'構造体宣言
Dim Real As Double
Dim Imag As Double
End Structure
|
- 定義済みの関数は以下のものです.
定義済み関数
za=C_DOUBLE(a,b) :複素数実数部と虚数部への数値の代入(Re(z)=a,Im(z)=b)
za=C_PLUS(z1,z2) :加算(za=z1+z2)
za=C_MINUS(z1,z2) :減算(za=z1-z2)
za=C_TIMES(z1,z2) :乗算(za=z1*z2)
za=C_DIVIDED(z1,z2):除算(za=z1/z2)
da=D_ABS(z) :絶対値(da=sqrt(Re(z)^2+Im(z)^2))
za=C_CONJ(z) :共役複素数(z=a+ib→za=a-ib)
za=C_SQRT(z) :平方根(za=sqrt(z))
za=C_EXP(z) :exp関数(za=exp(z))
za=C_COS(z) :cos関数(za=cos(z))
za=C_SIN(z) :sin関数(za=sin(z))
za=C_COSH(z) :cosh関数(za=cosh(z))
za=C_SINH(z) :sinh関数(za=sinh(z))
|
- (注意)
- za,z,z1,z2は複素数,a,b,daは実数.
- 複素数の絶対値は実数となるため関数名も「D_ABS()」としている.
- 関数値が複素数となるものは「C_」を頭に付加した名前としている.
使用コントロール
Button1
プログラムリスト
13:正規分布非超過確率・%点算定
概要(プログラム:vbTODAPP, vcsTODAPP, gccTODAPP)
- 正規分布表より%点・非超過確率(読み込みデータは 50 %以上の確率)を読み込み,Shenton の近似による非超過確率および戸田の近似による%点の計算を行い,比較するプログラムです.
- 大川勉先生の「ビジネスマン・文科系学生のためのマイコン統計学入門」掲載のプログラムを VB および C# のサブルーチンとして読み込めるようにしたものです.
- 同書掲載の%点から確率を計算する Laplace の連分数展開は 3.9σ までの範囲なら Shenton の近似で精度的に満足できるためここでは使用していません.ただし展開項は30までとっています.
- 本HPの事例では,正規確率プロットの確率軸作成のために用いています.
使用コントロール
ToolStrip1(Button1),OpenFileDialog1,SaveFileDialog1
プログラムリスト
入出力事例
14:直線回帰
概要(プログラム:vbKAIKI, vcsKAIKI, gccKAIKI)
データ (xi, yi) を直線 y=a*x+b に当てはめ,回帰係数 a,b および相関係数 r を求めるプログラムです.出力は ListBox 上に文字列で行っています.
使用コントロール
ToolStrip1(Button1),ListBox1
プログラムリスト