C 言語などから gnuplot を使うプログラミング事例です.
プログラム事例(MinGW Cから使う)
プログラム作成方針
- 出力ターミナルは,好みにより原則「png」画像です.
- プロットデータは,「temp.prn」などのブランク区切りの一時ファイルを介して gnuplot.exe に送り込みます.
配列を送るには,「plot "-"」というものがありますが,受け付ける配列の個数に限界があるようですので,(「pgnuplot.exe」ではうまくいかない場合がありましたが「gnuplot.exe」では問題ないようです)一時ファイルを介するようにしました.また,作成した一時ファイルを remove すると作図がうまくいかない場合があるようなので,消去しないで残しています.
- 普通軸で小数点を含む軸増分の場合,自動表示では整数部は整数,小数点部は小数点で表示されるため,軸数値の書式を指定するようにしています.
- gnuplot のコマンドは「gpl_temp.txt」というテキストファイルに一度落とし,「gnuplot.exe」を起動後に「load」する手順を採用しています.これにより,gnuplot の呼び出しは,以下のコードのみとしています.
fp=popen("gnuplot.exe","w");
fprintf(fp,"load \"gpl_temp.txt\"\n");
fflush(fp);
pclose(fp);
|
これは,「C で作成した gnuplot のコマンドが見たい!」という場合も想定したものです.このページでは,「gpl_temp.txt」も入力データファイル名の前に「gpl_」をつけることで掲載しました.これはプログラムを書き換えるのではなく,MS-DOS のバッチファイルで「gpl_temp.txt」を「rename」して作成しています.
- サブルーチン間の引数のやりとりが目障りなので,以下のように gnuplot に送り込む作図情報を格納する構造体を定義しています.
/*gnuplot用構造体宣言*/
/*scom,sxjiku,syjiku :タイトル(凡例),x軸ラベル,y軸ラベル*/
/*slogx,xmin,xmax,dx,sxfmt :x軸種,x軸最小値,x軸最大値,x軸増分,x軸書式*/
/*slogy,ymin,ymax,dy,syfmt :y軸種,y軸最小値,y軸最大値,y軸増分,y軸書式*/
struct GPdata{
char scom[100];char sxjiku[100];char syjiku[100];
char slogx[3];double xmin;double xmax;double dx;char sxfmt[20];
char slogy[3];double ymin;double ymax;double dy;char syfmt[20];
};
|
これ以外の変数が必要な場合は,別途宣言し,個別の引数として扱っています.
2次元グラフ画像出力(普通軸・対数軸)
- ここに示すサンプルプログラムでは,csv 形式のファイルからデータを入力し,png 形式の画像で出力しています.
- この内容であれば,わざわざ C 言語から gnuplot を起動する必要はありませんが,基本形として作成しました.
入力データ書式
サンプルプログラムの入力データ書式は以下の通りです.
両対数グラフ用入力データ書式
対数軸では軸の数値増分は自動で 0.1,1,10,100 ・・・として振り付けます.
01 | EL-Centro
02 | Period (sec),Response spectrum (gal)
03 | L,0.01,10
04 | L,1,10000
05 | 200
06 | 0.02,321.00549110268
07 | 0.0206312169369368,320.270844250607
08 | 0.0212823556149475,320.65628503045
・・・・・
|
- 01行目:プロットのタイトル
- 02行目:x 軸名(単位含む),y 軸名(単位含む)
- 03行目:x 軸種別( L:対数),x 軸最小値,x 軸最大値
- 04行目:y 軸種別( L:対数),y 軸最小値,y 軸最大値
- 05行目:データ組数
- 06行目以降:x 値,y 値・・・・以降同様(普通軸の数値)
普通軸グラフ用入力データ書式
普通軸では,軸の数値増分と書式を指定します.軸書式はC言語における書式と同じです.
01 | Accelaration
02 | time (sec),Accelaration (gal)
03 | N,0,100,10,"%.0f"
04 | N,-1,1,0.2,"%.1f"
05 | 101
06 | 0,0
07 | 1,0.246215381
08 | 2,0.472214312
・・・・・
|
- 01行目:プロットのタイトル
- 02行目:x 軸名(単位含む),y 軸名(単位含む)
- 03行目:x 軸種別(N:普通軸),x 軸最小値,x 軸最大値,x 軸増分,x 軸描画書式
- 04行目:y 軸種別(N:普通軸),y 軸最小値,y 軸最大値,y 軸増分,y 軸描画書式
- 05行目:データ組数
- 06行目以降:x 値,y 値・・・・以降同様(普通軸の数値)
実行コマンド事例
コンパイル後,入力ファイル名(ここでは inpGRL.txt)および出力ファイル名(ここでは fig_GRL.png)を含むコマンドを実行します.出力ファイルの拡張子は「.png」に固定です.
>gcc -o gccGRLN-png.exe gccGRLN-png.c
>gccGRLN-png inpGRL.txt fig_GRL.png
|
プログラムと入出力事例
正規確率プロット画像出力(普通横軸・対数横軸)
- ここに示すサンプルプログラムでは,csv 形式のファイルからデータを入力し,「temp.prn」というブランク区切りの一時ファイルを介して,png 形式の画像で出力しています.
- 入力されたデータの並びは基本的にランダムなことを想定しているため,ソートをかけて Hazen 公式により超過確率を計算する必要があります.このような処理を伴う場合は,C などのプログラムから gnuplot を使うのが便利に思います.
- 正規確率紙の縦軸を定める場合,gnuplot の有する「invnorm」関数を使うこともできますが,ここでは自作のサブルーチン「TODA」を用いています.
- フィッティングについても1次式への回帰であり gnuplot の「fitting機能」により可能ですが,ここでは自作のサブルーチン「KAIKI」を用いています.gnuplot の fitting 機能を用いた場合,回帰式や回帰係数の描画は問題なくできますが,相関係数を fitting 結果ファイルから探し出すのが面倒であったため,この方法を用いています.回帰係数および相関係数はグラフの左上に a, b, r として表示しています.
入力データ書式
サンプルプログラムの入力データ書式は以下の通りです.y 軸は,0.1〜99.9% で固定です.
両対数グラフ用入力データ書式
対数 x 軸では軸の数値増分は自動で 0.1,1,10,100 ・・・として振り付けます.
01 | Flowrate
02 | Measurement (m^3/s)
03 | L,1,1000
04 | 25
05 | 13.7
06 | 48.1
07 | 57.7
・・・・・
|
- 01行目:グラフのタイトル
- 02行目:x 軸名(単位含む)
- 03行目:x 軸種別( L:対数),x 軸最小値,x 軸最大値
- 04行目:データ組数
- 05行目以降:x 値・・・・以降同様(普通軸の数値)
普通軸グラフ用入力データ書式
普通 x 軸では,軸の数値増分と書式を指定します.軸書式は C 言語における書式と同じです.
01 | Volocity
02 | Measurement (m/s)
03 | N,0,10,1,"%.1f"
04 | 24
05 | 4.5
06 | 4.3
07 | 5.2
・・・・・
|
- 01行目:グラフのタイトル
- 02行目:x 軸名(単位含む)
- 03行目:x 軸種別( N:普通軸),x 軸最小値,x 軸最大値,x 軸増分,x 軸描画書式
- 04行目:データ組数
- 05行目以降:x 値・・・・以降同様(普通軸の数値)
実行コマンド事例
コンパイル後,入力ファイル名(ここでは inpHAZL.txt)および出力ファイル名(ここでは fig_HAZL.png)を含むコマンドを実行します.出力ファイルの拡張子は「.png」に固定です.
>gcc -o gccHAZEN-png.exe gccHAZEN-png.c
>gccHAZEN-png inpHAZL.txt fig_HAZL.png
|
プログラムと入出力事例
2次元グラフ画像出力(普通軸・対数軸)複数列入力対応
- ここに示すサンプルプログラムでは,csv 形式のファイルからデータを入力し,「temp.prn」というブランク区切りの一時ファイルを介して,png 形式の画像で出力しています.
- このプログラムについても,わざわざC言語から gnuplot を起動する必要はありませんが,基本形として作成しました.
入力データ書式
サンプルプログラムの入力データ書式は以下の通りです.ここでは共通の x 値を有する y1, y2, y3 の3種類のプロットを重ね書きしています.x 軸・y 軸は共に普通軸での書式を示しています.
01 | Heat transmission boundary
02 | Time (hr),Temperature (deg.C)
03 | N,0,1000,100,"%.0f"
04 | N,0,50,10,"%.0f"
05 | 1000,3
06 | time,Node-1,Node-2,Node-3
07 | 0.00E+00,2.00E+01,2.00E+01,2.00E+01
08 | 1.00E+00,2.46E+01,2.54E+01,2.52E+01
09 | 2.00E+00,2.76E+01,2.95E+01,2.90E+01
・・・・・
|
- 01行目:グラフのタイトル
- 02行目:x 軸名(単位含む),y 軸名(単位含む)
- 03行目:x 軸種別( N:普通軸),x 軸最小値,x 軸最大値,x 軸増分,x 軸描画書式
- 04行目:y 軸種別( N:普通軸),y 軸最小値,y 軸最大値,y 軸増分,y 軸描画書式
- 05行目:データ組数,プロット数
- 06行目:ダミー,y1 凡例,y2 凡例,y3 凡例
- 07行目以降:x 値,y1 値, y2 値,y3 値・・・・以降同様(普通軸の数値)
実行コマンド事例
コンパイル後,入力ファイル名(ここでは inpGRPARATP.txt)および出力ファイル名(ここでは outGRPARATP.png)を含むコマンドを実行します.出力ファイルの拡張子は「.png」に固定です.
>gcc -o gccGRPARA-png.exe gccGRPARA-png.c
>gccGRPARA-png inpGRPARATP.txt fig_GRPARATP.png
|
プログラムと入出力事例
単相関分析等確率楕円図化出力(普通軸・対数軸)
- ここに示すサンプルプログラムは,複数の重ね書きを行うデータの入った csv 形式のファイルからデータを入力し,ブランク区切りの一時ファイルを介して gnuplot でプロットを行うと共に,データの統計量を計算し,gnuplot の「媒介変数による関数図化機能」を用いて等確率楕円を重ね書きし,png 形式の画像で出力するものです.
- このような処理の場合も,C などのプログラムから gnuplot を操作するのが便利に思います.例えば,統計計算に加え,「forループ」と「fprintf」を使って,重ね書きする場合のコマンドを機械的に書き込めるなどのメリットがあると思います.
- 入力ファイルは1つ,出力ファイルは統計量保存ファイル( txt )と画像ファイル( png )の2種類です.
- 軸を対数に指定すると,統計量は常用対数値の平均・標準偏差となります.
- 一時ファイルは,「temp0.prn,temp1.prn,・・・」のように重ね書きするプロット種毎に1つ作成します.
- 図中左上の「p=**」の数値は,サンプルが楕円内に入る確率を示し,入力データファイルの中で与えています.
入力データ書式
サンプルプログラムの入力データ書式は以下の通りです.
両対数グラフ用入力データ書式
01 | Log10 test data
02 | x axis,y axis
03 | L,0.1,10000
04 | L,0.1,10000
05 | 4,0.9
06 | 4,Small
07 | 1,1
08 | 2,2
09 | 1,2
10 | 2,1
11 | 4,Middle
12 | 10,10
13 | 20,20
14 | 10,20
15 | 20,10
16 | 4,Large
17 | 100,100
18 | 200,200
19 | 100,200
20 | 200,100
21 | 4,Big
22 | 1000,1000
23 | 2000,2000
24 | 1000,2000
25 | 2000,1000
|
- 01行目:グラフのタイトル
- 02行目:x 軸名(単位含む),y 軸名(単位含む)
- 03行目:x 軸種別( L:対数),x 軸最小値,x 軸最大値
- 04行目:y 軸種別( L:対数),y 軸最小値,y 軸最大値
- 05行目:重ね書きグラフ数,等確率楕円内の確率値
- 06行目:データ組数( 4 ),グラフ凡例( Small )
- 07〜10行目:グラフ凡例 Small での x 値,y 値(普通軸の値)
- 11行目:データ組数( 4 ),グラフ凡例( Middle )
- 12〜15行目:グラフ凡例 Middle での x 値,y 値(普通軸の値)
- 16行目:データ組数( 4 ),グラフ凡例( Middle )
- 17〜20行目:グラフ凡例 Largeでの x 値,y 値(普通軸の値)
- 21行目:データ組数( 4 ),グラフ凡例( Big )
- 22〜25行目:グラフ凡例 Big での x 値,y 値(普通軸の値)
普通軸グラフ用入力データ書式
普通x軸では,軸の数値増分と書式を指定します.軸書式はC言語における書式と同じです.
01 | Comparison of climates
02 | Rainfall (mm/month),Temperature (deg.C)
03 | N,0,300,50,"%.0f"
04 | N,-10,30,5,"%.0f"
05 | 4,0.68
06 | 12,Asahikawa
07 | 74.1, -7.8
08 | 51.5, -7.2
09 | 54.1, -2.4
10 | 55.8, 5.2
・・・・・
|
- 01行目:グラフのタイトル
- 02行目:x 軸名(単位含む),y 軸名(単位含む)
- 03行目:x 軸種別( N:普通軸),x 軸最小値,x 軸最大値,x 軸増分,x 軸描画書式
- 04行目:y 軸種別( N:普通軸),y 軸最小値,y 軸最大値,y 軸増分,y 軸描画書式
- 05行目:重ね書きグラフ数,等確率楕円内の確率値
- 06行目:データ組数( 12 ),グラフ凡例( Asahikawa )
- 07行目以降:x 値,y 値・・・・以降同様(普通軸の数値)
実行コマンド事例
コンパイル後,入力ファイル名(ここでは inpDAEN_L.txt)および統計量出力テキストファイル名(ここでは outDAEN_L.txt)および出力画像ファイル名(ここでは fig_DAEN_L.png)を含むコマンドを実行します.出力ファイルの拡張子は「.png」に固定です.
>gcc -o gccGRDAEN.exe gccGRDAEN.c
>gccGRDAEN inpDAEN_L.txt outDAEN_L.txt fig_DAEN_L.png
|
プログラムと入出力事例
フーリエスペクトル計算・図化出力(普通軸・対数軸)
- ここには,2つの波形データを入力し,フーリエスペクトルの平滑化処理後,スペクトル比を計算し保存するプログラムと,gnuplot を用いて,これを図化するプログラムを掲載しています.
- 作成した図は,平滑化処理したフーリエスペクトルとスペクトル比を重ね書きしており,スペクトル比にはピークとなる振動数も gnuplot の label にて表示しています.ピーク周波数は計算している全領域で検索していますが,表示しているのは x 軸の最小〜最大に入る範囲で大きい順に 10 個までとしています.
- フーリエスペクトル計算プログラムで読み込める時刻暦の個数は,最大 32768( 2 の 15 乗)です.このため,フーリエスペクトル図化プログラムで読み込めるデータの最大行数は,16385 行( 32768 / 2 + 1 )です.
スペクトル比計算プログラム(gccCALFSR.c)での入出力力データ書式
サンプルプログラムのデータ書式は以下の通りです.
スペクトル比計算プログラムの波形入力データ書式(inp8000_EW1.csv)
01 | 2008/06/14 08:43:00 IWTH25 地中EW Max.acc=747.922
02 | dt,0.01
03 | ndata,8000
04 | 0.191
05 | 0.19
06 | 0.191
07 | 0.193
・・・・・
|
- 01行目:コメント
- 02行目:サンプリングピッチ
- 03行目:データ数
- 04行目以降:波形データ
スペクトル比計算プログラムの出力データ書式(out8000_EW.csv)
後ほど gnuplot で読み込めるよう,初めの 6 行は行頭に # を付けています.
01 | # in1=,inp8000_EW2.csv
02 | # in2=,inp8000_EW1.csv
03 | # out=,out8000_EW.csv
04 | # band=,1
05 | # ndata=,4097
06 | # frq,fs01,fs02,fsp1,fsp2,fsr
07 | 0,0.00574687,0.000272524,56.8772,37.4307,1.51953
08 | 0.012207,23.9102,3.83634,56.992,37.4935,1.52005
09 | 0.0244141,4.46573,3.28742,57.3353,37.681,1.5216
・・・・・
|
- 01行目:分子入力波形ファイル名
- 02行目:分母入力波形ファイル名
- 03行目:出力ファイル名
- 04行目:平滑化バンド幅(Hz)
- 05行目:データ行数
- 06行目:データの意味
- 07行目以降:frq,fs01,fs02,fsp1,fsp2,fsr・・・以降同様(普通軸の数値)
- frq:振動数,fs01:分子スペクトル,fs02:分母スペクトル
- fsp1:分子平滑化スペクトル,fsp2:分母平滑化スペクトル,fsr:スペクトル比
スペクトル比図化プログラム(gccFIGFSR.c)での入出力力データ書式
入力ファイルのデータ書式は以下の通りです(inpFIGFSR.txt).入力ファイルは,作図用データ入力の手間を省くため,先頭4行に作図用パラメータをいれ,以下は作図枚数とスペクトルの格納されたファイルなどを指定するようにしました.出力は png 形式画像データです.
01 | # gp.scomは未使用
02 | Frequency (Hz),Fourier spectrum (gal*sec)
03 | N,0,30,5,"%.0f"
04 | L,0.1,1000
05 | 3
06 | Spectrum ratio EW,SF,UG,out8000_EW.csv,fig_out8000_EW.png
07 | Spectrum ratio NS,SF,UG,out8000_NS.csv,fig_out8000_NS.png
08 | Spectrum ratio UD,SF,UG,out8000_UD.csv,fig_out8000_UD.png
|
- 01行目:コメント(読み飛ばし)
- 02行目:x軸名,y軸名
- 03行目:x軸種(N:普通),x軸最小値,x軸最大値,x軸増分,x 軸描画書式<
- 04行目:y軸種(L:対数),y軸最小値,y軸最大値
- 05行目:グラフ作成枚数(ここでは3枚)
- 06行目:1枚目グラフタイトル,分子凡例,分母凡例,スペクトル入力ファイル名,出力画像ファイル名
- 07行目:2枚目グラフタイトル,分子凡例,分母凡例,スペクトル入力ファイル名,出力画像ファイル名
- 08行目:3枚目グラフタイトル,分子凡例,分母凡例,スペクトル入力ファイル名,出力画像ファイル名
- 注)スペクトル入力ファイルは,スペクトル計算結果ファイルと同一
実行コマンド事例
コンパイル後,実行ファイル名に続いて,必要な入力ファイル名などを入力し実行します.以下はバッチファイルの例です.
01 | rem gcc -o gccCALFSR.exe gccCALFSR.c
02 | gccCALFSR 1.0 inp8000_EW2.csv inp8000_EW1.csv out8000_EW.csv
03 | gccCALFSR 1.0 inp8000_NS2.csv inp8000_NS1.csv out8000_NS.csv
04 | gccCALFSR 1.0 inp8000_UD2.csv inp8000_UD1.csv out8000_UD.csv
05 | rem gcc -o gccFIGFSR.exe gccFIGFSR.c
06 | gccFIGFSR inpFIGFSR.txt
|
- 01行目:コメント文(gccCALFSRのコンパイル)
- 02行目:exeファイル名,平滑化バンド幅(1.0Hz),分子波形ファイル名,分母波形ファイル名,結果出力ファイル名
- 03行目:exeファイル名,平滑化バンド幅(1.0Hz),分子波形ファイル名,分母波形ファイル名,結果出力ファイル名
- 04行目:exeファイル名,平滑化バンド幅(1.0Hz),分子波形ファイル名,分母波形ファイル名,結果出力ファイル名
- 05行目:コメント文(gccFIGFSRのコンパイル)
- 06行目:exeファイル名,入力ファイル名
プログラムと入出力事例
ヒストグラム図化出力(普通軸・対数軸)
- ここに示すサンプルプログラムは,ヒストグラムを作成・図化出力するものです.
- 縦軸は相対頻度(%)に固定し,ヒストグラムと累積確率をプロットするようにしました.
- 入力ファイルは1つ,出力ファイルは画像ファイル( png )です.入力ファイルにおけるデータの並びはランダムでかまいません.プログラム中でソートをかけています.
- 一時ファイルは,ヒストグラム描画用の「temp0.prn」と累積確率描画用の「temp1.prn」の2種類です.
入力データ書式
サンプルプログラムの入力データ書式は以下の通りです.
x軸対数グラフ用入力データ書式
01 | Log histgram test
02 | data
03 | 20
04 | L,0.001,1000
05 | 10000
06 | 0.000948331
07 | 1.445659452
08 | 0.136212198
・・・・・
|
- 01行目:グラフのタイトル
- 02行目:x 軸名(単位含む)
- 03行目:ヒストグラム区分用の x 軸分割数
- 04行目:x 軸種別( L:対数),x 軸最小値,x 軸最大値
- 05行目:データ数
- 06行目以降:データ値(普通軸の値)
普通軸グラフ用入力データ書式
普通 x 軸では,軸の数値増分と書式を指定します.軸書式はC言語における書式と同じです.
01 | Histgram test
02 | data
03 | 20
04 | N,-5,5,1,"%.0f"
05 | 10000
06 | -3.02304
07 | 0.160066
・・・・・
|
- 01行目:グラフのタイトル
- 02行目:x 軸名(単位含む)
- 03行目:ヒストグラム区分用の x 軸分割数
- 04行目:x 軸種別( N:普通軸),x 軸最小値,x 軸最大値,x 軸増分,x 軸描画書式
- 05行目:データ数
- 06行目以降:データ値
実行コマンド事例
コンパイル後,入力ファイル名(ここでは inpHISTL.txt)および出力ファイル名(ここでは fig_HISTL.png)を含むコマンドを実行します.出力ファイルの拡張子は「.png」に固定です.
>gcc -o gccHIST.exe gccHIST.c
>gccHIST inpHISTL.txt fig_HISTL.png
|
プログラムと入出力事例
Simplex法による任意曲線回帰図化出力(普通軸)
- ここに示すサンプルプログラムは,Simplex 法により任意曲線回帰を行い,これを図化出力するものです.
- gnuplot のように関数形を直接入力することはできず,プログラムの中で,回帰する未知数の数 mpara(サブルーチン:MPARA_SET )と,回帰する関数形(サブルーチン:Vfunc)を書き込む必要があります.そこが面倒ですが,同じ関数に多くのデータ群を回帰したいときには便利です.
- 描画の軸は普通軸のみです.
- 一時ファイルは,入力データプロット用の「temp0.prn」と回帰結果描画用の「temp1.prn」の2種類です.
- この事例では,以下に示す,減衰振動の式に回帰を行っています.parameter[0] 〜 parameter[3] が求めたい回帰係数を示します.
/*減衰振動(mpara=4)*/
fx=parameter[0]*exp(-parameter[1]*x)*sin(parameter[2]*x+parameter[3]);
|
入力データ書式
サンプルプログラムの入力データ書式は以下の通りです.
普通軸グラフ用入力データ書式
01 | Simplex_test_1
02 | time (sec),Displacement (mm)
03 | N,0,800,100,"%.0f"
04 | N,-10,10,2,"%.0f"
05 | 800
06 | 0.000,2.543
07 | 1.000,3.402
08 | 2.000,2.978
09 | 3.000,3.785
・・・・・
|
- 01行目:コメント
- 02行目:x 軸名(単位含む),y 軸名
- 03行目:x 軸種別( N:普通軸),x 軸最小値,x 軸最大値,x 軸増分,x 軸描画書式
- 04行目:y 軸種別( N:普通軸),y 軸最小値,y 軸最大値,y 軸増分,y 軸描画書式
- 05行目:データ数
- 06行目以降:データ値
出力データ書式
サンプルプログラムの出力データ書式は以下の通りです.
普通軸グラフ用出力データ書式
01 | iflag,0
02 | iteration,405
03 | parameter_0,5.11924
04 | parameter_1,0.00500138
05 | parameter_2,0.0631191
06 | parameter_3,0.73389
07 | datax,datay,y_est
08 | 0,2.543,3.42868
09 | 1,3.402,3.64337
10 | 2,2.978,3.84139
11 | 3,3.785,4.02212
・・・・・
|
- 01行目:収束判定( 0 :収束, 1 :未収束)
- 02行目:収束までの繰り返し回数
- 03行目:1 個目の回帰係数
- 04行目:2 個目の回帰係数
- 05行目:3 個目の回帰係数
- 06行目:4 個目の回帰係数
- 07行目:書き出しデータの意味
- 08行目以降:データ値(入力 x 値,入力 y 値,回帰推定値)
実行コマンド事例
コンパイル後,入力ファイル名(ここでは inpSIMP1.txt)および出力ファイル名(ここでは回帰結果テキスト:outSIMP1.txt と画像ファイル:fig_SIMP1.png)を含むコマンドを実行します.画像出力ファイルの拡張子は「.png」に固定です.
>gcc -o gccSIMPLEX.exe gccSIMPLEX.c
>gccGRDAEN inpSIMP1.txt outSIMP1.txt fig_SIMP1.png
|
プログラムと入出力事例
フーリエ級数展開による任意曲線回帰図化出力(普通軸)
- ここに示すサンプルプログラムは,フーリエ級数展開により任意曲線回帰を行い,これを図化出力するものです.
- 入力データのx値の刻みは一定値とする必要があります.
- フーリエ級数は高速フーリエ変換により求めています.
- 出力値は回帰結果のみとしており,フーリエ係数の出力は行っていません.
- 一時ファイルは,入力データプロット用の「temp0.prn」,回帰結果描画用の「temp1.prn」,残差描画用の「temp2.prn」の3種類です.
入力データ書式
サンプルプログラムの入力データ書式は以下の通りです.
普通軸グラフ用入力データ書式
01 |Sample_mm=1000
02 |x-axis,y-axis
03 |N,1000,8000,1000,"%.0f"
04 |N,-5,30,5,"%.0f"
05 |6299,1000
06 |1000,11.3
07 |1001,11.2
・・・・・
|
- 01行目:コメント
- 02行目:x 軸名(単位含む),y 軸名
- 03行目:x 軸種別( N:普通軸),x 軸最小値,x 軸最大値,x 軸増分,x 軸描画書式
- 04行目:y 軸種別( N:普通軸),y 軸最小値,y 軸最大値,y 軸増分,y 軸描画書式
- 05行目:データ数,展開項数
- 06行目以降:データ値
出力データ書式
サンプルプログラムの出力データ書式は以下の通りです.
普通軸グラフ用出力データ書式
01 |Sample_mm=1000
02 |6299
03 |x,y,func
04 |1.000000e+003,1.130000e+001,1.252506e+001
05 |1.001000e+003,1.120000e+001,1.171718e+001
06 |1.002000e+003,1.110000e+001,1.112053e+001
07 |1.003000e+003,1.100000e+001,1.081004e+001
・・・・・
|
- 01行目:コメント
- 02行目:入力データ数
- 03行目:数値列の意味
- 04行目以降:データ値(入力 x 値,入力 y 値,回帰推定値)
実行コマンド事例
コンパイル後,入力ファイル名(ここでは inp_mm1000.txt)および出力ファイル名(ここでは回帰結果テキスト:out_mm1000.txt と画像ファイル:fig_mm1000.png)を含むコマンドを実行します.画像出力ファイルの拡張子は「.png」に固定です.
>gcc -o gccFAPP.exe gccFAPP.c
>gccFAPP inp_mm1000.txt out_mm1000.txt fig_mm1000.png
|
プログラムと入出力事例
岩盤内埋設式水圧鉄管の限界座屈圧力(普通軸)
- ここに示すサンプルプログラムは,岩盤内埋設式水圧鉄管の限界座屈圧力を算定し,これを図化出力するものです.
- Amstutzの原典によるものと,水文鉄管技術基準によるものを比較してみました.
プログラムと入出力事例