- not so Frequently Asked Questions - update 2004/8/31
|
|
gnuplot 入門 --- 数値計算編ã¾ãšã¯ãƒ‡ãƒ¼ã‚¿ãƒ•ã‚¡ã‚¤ãƒ«ã®æº–備計算çµæžœã‚’プãƒãƒƒãƒˆã™ã‚‹ãŸã‚ã«ã¯ï¼Œçµæžœã‚’ファイルã«è½ã—ã¦ãŠãå¿…è¦ãŒ ã‚ã‚Šã¾ã™ï¼Žãƒ•ã‚¡ã‚¤ãƒ«ã¯é€šå¸¸ã®ãƒ†ã‚ストファイルã«ã—ã¦ãŠãã¾ã™ï¼Žæ¬¡ã®ã‚ˆã†ãª プãƒã‚°ãƒ©ãƒ を作り,ãã®çµæžœã‚’プãƒãƒƒãƒˆã—ã¦ã¿ã¾ã—ょã†ï¼Žã“ã‚Œã¯ï¼Œy=exp(-x)ã® Pade近似を計算ã™ã‚‹ã‚‚ã®ã§ã™ï¼Ž #include <stdio.h> #include <math.h> int main(void); int main(void) { int i; double x,y,z1,z2,d; d = 0.1; x = 0.0; for(i=0;i<50;i++){ x += d; y = exp(-x); z1 = (6 - 2*x)/(6 + 4*x + x*x); z2 = (6 - 4*x + x*x)/(6 + 2*x); printf("% 6.2f % 11.4e % 11.4e % 11.4e\n", x,y,z1,z2); } return 0; } INTEGER I REAL*8 X,Y,Z1,Z2,D D = 0.1 X = 0.0 DO 10 I=1,50 X = X+D; Y = EXP(-X) Z1 = (6 - 2*X)/(6 + 4*X + X*X) Z2 = (6 - 4*X + X*X)/(6 + 2*X) WRITE(6,20) X,Y,Z1,Z2 10 CONTINUE 20 FORMAT(F6.2,3(1X,1PE11.4)) STOP END ã“ã®ãƒ—ãƒã‚°ãƒ©ãƒ ã®å‡ºåŠ›ã®æœ€åˆã¨æœ€å¾Œã®éƒ¨åˆ†ã¯ï¼Œæ¬¡ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ï¼Žå·¦ç«¯ ã®ã‚«ãƒ©ãƒ ãŒX座標,2番目ã®ã‚«ãƒ©ãƒ ãŒEXP(-X)ã®å€¤ï¼Œæ¬¡ã®2ã¤ã®ã‚«ãƒ©ãƒ ãŒPadeè¿‘ä¼¼ ã«ã‚ˆã‚‹å€¤ã‚’表ã—ã¦ã„ã¾ã™ï¼ŽXã®å°ã•ã„所ã§è¿‘ä¼¼ã¯è‰¯ã,XãŒå¤§ãããªã‚‹ã¨ç²¾åº¦ãŒ 悪ããªã£ã¦ã„ã‚‹ã®ãŒã‚ã‹ã‚‹ã¨æ€ã„ã¾ã™ï¼Ž 0.10 9.0484E-01 9.0484E-01 9.0484E-01 0.20 8.1873E-01 8.1871E-01 8.1875E-01 0.30 7.4082E-01 7.4074E-01 7.4091E-01 0.40 6.7032E-01 6.7010E-01 6.7059E-01 0.50 6.0653E-01 6.0606E-01 6.0714E-01 .... 4.60 1.0052E-02 -7.0237E-02 5.7632E-01 4.70 9.0953E-03 -7.2510E-02 6.0325E-01 4.80 8.2297E-03 -7.4627E-02 6.3077E-01 4.90 7.4466E-03 -7.6597E-02 6.5886E-01 5.00 6.7379E-03 -7.8431E-02 6.8750E-01 (X,Y)ã®çµ„をプãƒãƒƒãƒˆã“ã®ãƒ‡ãƒ¼ã‚¿ã‚’プãƒãƒƒãƒˆã—ã¾ã—ょã†ï¼Žè¨ˆç®—çµæžœã®å‡ºåŠ›ã‚’ファイルã«æ›¸ã出㗠ã¾ã™ï¼Žã“ã®ãƒ•ã‚¡ã‚¤ãƒ«åã‚’output.datã¨ã—ã¦ãŠãã¾ã™ï¼Žãƒ—ãƒãƒƒãƒˆã™ã‚‹ãƒ‡ãƒ¼ã‚¿ã¯ï¼Œ X座標1ã¤ã«å¯¾ã—ã¦3カラムã‚ã‚Šã¾ã™ï¼Žã¾ãšã¯ï¼Œ2カラム目(EXP(-X)ã®å€¤)をプãƒãƒƒ トã—ã¾ã—ょã†ï¼Ž gnuplot> plot "output.dat" using 1:2 with lines ![]() 上ã®å›³ã¯ï¼Œèª¬æ˜Žã‚’ã—ã‚„ã™ã„様ã«ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’å°‘ã—å°ã•ãã—ã¦ã„ã¾ã™ï¼Ž プãƒãƒƒãƒˆã™ã‚‹ã‚«ãƒ©ãƒ 㯠using ã§æŒ‡å®šã—ã¾ã™ï¼Žusing X:Y ã®æ§˜ã«ã‚³ãƒãƒ³ã® å·¦ãŒX座標ã®ã‚«ãƒ©ãƒ ,å³ãŒY座標ã®ã‚«ãƒ©ãƒ ã«ãªã‚Šã¾ã™ï¼Žwith ã®å¾Œã«ï¼Œãƒ—ãƒãƒƒãƒˆ ã®ã‚¹ã‚¿ã‚¤ãƒ«ã‚’指定ã—ã¾ã™ï¼Žlinesãªã‚‰ï¼Œè¨ˆç®—点ã®é–“ã‚’ç›´ç·šã§çµã³ã¾ã™ï¼Žãƒ—ãƒãƒƒ トã™ã‚‹ã¨ãã®ç·šã®ç¨®é¡žãŒå¹¾ã¤ã‹ã‚り,1ã‹ã‚‰é †ç•ªã«ç•ªå·ãŒä¸Žãˆã‚‰ã‚Œã¦ã„ã¾ã™ï¼Ž with linesã®å¾Œã«ãã®ç•ªå·ã‚’与ãˆã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ï¼Žä½•ã‚‚ã—ãªã‘ã‚Œã°ï¼Œ gnuplotã¯åŒæ™‚ã«ãƒ—ãƒãƒƒãƒˆã™ã‚‹ç·šãŒå¢—ãˆã‚‹ãŸã³ã«1番ã®ç·šã‹ã‚‰é †ç•ªã«ä½¿ã£ã¦ã„ã ã¾ã™ï¼Ž プãƒãƒƒãƒˆã®ã‚¹ã‚¿ã‚¤ãƒ«ã«ã¯ï¼Œç‚¹ã‚’打ã¤ï¼Œè¨˜å·ã‚’æã,線ã§çµã¶ï¼ŒéšŽæ®µçŠ¶ã®ç·š ã§çµã¶ï¼Œæ£’グラフをæã,ç‰ãŒã‚ã‚Šã¾ã™ï¼Žä¸»ãªã‚¹ã‚¿ã‚¤ãƒ«ã‚’以下ã«æŒ™ã’ã¾ã™ï¼Ž
åŒæ™‚ã«è¤‡æ•°ã®ç·šã‚’引ã次ã«ï¼Œæ®‹ã‚Šã®2ã¤ã®ã‚«ãƒ©ãƒ ã‚’åŒæ™‚ã«ãƒ—ãƒãƒƒãƒˆã—ã¦ã¿ã¾ã™ï¼Žè¤‡æ•°ã®ç·šã‚’åŒæ™‚ ã«æãã«ã¯plotã«ç¶šã‘ã¦ï¼Œæãã‚‚ã®ã‚’é †ã«æŒ‡å®šã—ã¦ã„ãã¾ã™ï¼Žgnuplotã¯ï¼Œå…¨ 部ã®ãƒ‡ãƒ¼ã‚¿ãŒç”»é¢ã«åŽã¾ã‚‹ã‚ˆã†ã«è»¸ã®å€¤ã‚’é©å½“ã«ã‚¹ã‚±ãƒ¼ãƒ«ã—,自動的ã«ç·šç¨®ã‚’ 変ãˆãªãŒã‚‰ãƒ—ãƒãƒƒãƒˆã—ã¾ã™ï¼Ž"output.dat" using X:Y with lines ã‚’ãã‚Šã‹ãˆ ã™ã‚ã‘ã§ã™ã‹ã‚‰ï¼Œå…¥åŠ›è¡ŒãŒé•·ããªã£ã¦ã—ã¾ã„ã¾ã™ï¼Žãã®å ´åˆã¯ï¼Œ\(¥記å·ï¼Œã‚‚ ã—ãã¯ãƒãƒƒã‚¯ã‚¹ãƒ©ãƒƒã‚·ãƒ¥)を行末ã«ã„れるã¨ï¼Œæ¬¡ã®è¡Œã‚‚継続行ã¨ã¿ãªã•ã‚Œã¾ã™ï¼Ž gnuplot> plot "output.dat" using 1:2 with lines, \ > "output.dat" using 1:3 with lines,\ > "output.dat" using 1:4 with lines ![]() 2番目ã®ç·‘色ã®ç·šã§æã‹ã‚Œã¦ã„る数値ãŒXã®å¤§ããªæ‰€ã§è² ã«ãªã‚‹ã®ã§ï¼ŒY軸㮠最å°å€¤ã¯è‡ªå‹•çš„ã«-0.1ã¾ã§å»¶ã³ã¦ã„ã¾ã™ï¼Ž 図ã®å‡¡ä¾‹ã«ã¯ï¼Œãƒ—ãƒãƒƒãƒˆã—ãŸãƒ‡ãƒ¼ã‚¿ãƒ•ã‚¡ã‚¤ãƒ«åã¨ä½¿ã£ãŸã‚«ãƒ©ãƒ ãŒè¡¨ç¤ºã•ã‚Œã¦ ã„ã¾ã™ï¼Žã“ã“を変ãˆã¦ã¿ã¾ã—ょã†ï¼Žã¾ãšä¸€ç•ªä¸Šã®èµ¤ã„ç·šã¯è§£æžé–¢æ•°ã®å€¤ãªã®ã§ï¼Œ "Analytical"ã¨æ›¸ãã¾ã™ï¼Žæ¬¡ã®ç·‘ã®ç·šã¯Padeè¿‘ä¼¼ã®L=1,M=2を使ã£ãŸã‚‚ã®ãªã®ã§ï¼Œ "L=1, M=2" ã¨ã„ã†è¡¨é¡Œã‚’付ã‘ã¾ã—ょã†ï¼Žæœ€å¾Œã® é’ã„ç·šã¯ï¼ŒåŒã˜ãL=2, M=2ã®Padeè¿‘ä¼¼ãªã®ã§ï¼Œã“れを表題ã«ã—ã¾ã—ょã†ï¼Ž 凡例ã®ä¸èº«ã‚’変ãˆã‚‹ã«ã¯ï¼Œãƒ—ãƒãƒƒãƒˆã™ã‚‹ã¨ãã«titleを付ã‘ã¾ã™ï¼Ž gnuplot> plot "output.dat" using 1:2 title "Analytical" with lines, \ > "output.dat" using 1:3 title "L=1, M=2" with lines,\ > "output.dat" using 1:4 title "L=2, M=1" with lines ![]() グラフã®ã‚¿ã‚¤ãƒˆãƒ«ã¨è»¸åを入れる次ã«Xã¨Y軸ã®åå‰ã‚’入れã¾ã™ï¼ŽX軸ã«ã¯ "x"を書ã,Y軸ã«ã¯"y=exp(-x)" ã‚’ã¤ã‘ã¾ã—ょã†ï¼Žè»¸ã®è¨å®šã«ã¯ï¼Œset xlabelã¨set ylabelを使ã„ã¾ã™ï¼Žã¾ãŸï¼Œ set titleを使ã„,図全体ã®è¡¨é¡Œã¨ã—ã¦"Pade approximation"ã¨ã„ã†ã®ã‚’ã„ã‚Œ ã¾ã—ょã†ï¼Žreplotを使ã†ã¨ï¼Œãƒ—ãƒãƒƒãƒˆã—ãŸã‚‚ã®ã¨åŒã˜ã‚‚ã®ã‚’ã‚‚ã†ä¸€åº¦ãƒ—ãƒãƒƒãƒˆ ã—ç›´ã—ã¾ã™ã®ã§ï¼Œå…ˆç¨‹ã®é•·ã„コマンドをもã†ä¸€åº¦å…¥åŠ›ã™ã‚‹å¿…è¦ã¯ã‚ã‚Šã¾ã›ã‚“. gnuplot> set xlabel "x" gnuplot> set ylabel "y=exp(-x)" gnuplot> set title "Pade approximation" gnuplot> replot ![]() 図ã®å¤§ãã•ãŒå°‘ã—変ã‚ã£ãŸã®ãŒåˆ†ã‹ã‚Šã¾ã™ã‹ï¼Žgnuplotã¯å…¨ä½“ãŒæž 内(ä»Šã® å ´åˆã§ã¯ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦)ã«åŽã¾ã‚‹æ§˜ã«ï¼Œå…¨ä½“を自動的ã«èª¿æ•´ã—ã¾ã™ï¼Žè»¸åや表題 ãªã©ãŒå…¥ã‚‹ã¨ï¼Œãã®åˆ†å›³è‡ªä½“ã¯å°ã•ããªã‚Šã¾ã™ï¼Ž Y軸åã®"y=exp(-x)"ã¯ï¼ŒY軸ã®æ¨ªã«å…¥ã‚‰ãšä¸Šã«æ›¸ã‹ã‚Œã¦ã„ã¾ã™ï¼Žã“ã‚Œã¯Xウィ ンドウã§å›³ã‚’プãƒãƒƒãƒˆã™ã‚‹ã¨ãã«æ–‡å—を回転ã§ããªã„ãŸã‚ã§ã™ï¼Žæ–‡å—を横ã«ã§ ãã‚‹ã‚‚ã®(PostScriptç‰)ã«å‡ºåŠ›ã™ã‚Œã°ï¼ŒY軸åã¯æ£ã—ã„ä½ç½®ã«è¡¨ç¤ºã•ã‚Œã¾ã™ï¼Žãª ãŠï¼Œä½¿ã£ã¦ã„ã‚‹gnuplotãŒver.3.8より新ã—ã„ã‚‚ã®ãªã‚‰ï¼Œç”»é¢ä¸Šã§ã‚‚回転ã•ã‚Œã¦ ã„ã‚‹ã¯ãšã§ã™ï¼Ž XYã®ç¯„囲を変更ã™ã‚‹ä»Šåº¦ã¯ï¼ŒX軸ã¨Y軸ã®ç¯„囲を変更ã—ã¾ã™ï¼ŽY軸ã®ç¯„囲ã¯-0.1ã‹ã‚‰1ã«ãªã£ã¦ã„ã¾ã™ï¼Ž ã“ã®è² ã®éƒ¨åˆ†ã‚’切りè½ã¨ã—ã¦ã—ã¾ã„,Yã®ç¯„囲を[0,1]ã«ã—ã¾ã—ょã†ï¼ŽXã®ç¯„囲㯠[0,5]ã§ã™ãŒï¼Œã“れを[0,2]ã«ã—ã¾ã—ょã†ï¼Žè¡¨ç¤ºç¯„囲を指定ã™ã‚‹ã«ã¯ï¼Œset {x|y}range を使ã„ã¾ã™ï¼Ž gnuplot> set xrange [0:2] gnuplot> set yrange [0:1] gnuplot> replot ![]() 軸ã«ç›®ç››ã‚’ã„れるX軸ã®ç›®ç››ã¯0ã‹ã‚‰å§‹ã¾ã£ã¦0.5刻ã¿ã§å¢—ãˆã¦ã„ã¾ã™ï¼Žã“れを1刻ã¿ã«ã—,ãã® é–“éš”ã«0.2ã¥ã¤å°ã•ãªç›®ç››ã‚’ã¤ã‘ã¾ã—ょã†ï¼Žã¾ãŸï¼ŒY軸ã®ã»ã†ã¯ï¼Œ0.5刻ã¿ã«ã—, ãã®é–“ã‚’5ç‰åˆ†ã—ã¾ã—ょã†ï¼Ž 目盛㯠set {x|y}tics ã§å¤‰ãˆã¾ã™ï¼Ž set xtics 1 ã®ã‚ˆã† ã«æ•°å—を一ã¤ã ã‘与ãˆã‚‹ã¨ï¼Œãã®æ•°å—ã®é–“éš”ã§ç›®ç››ãŒä»˜ã,ãã“ã«æ•°å—ãŒæ›¸ã‹ã‚Œã¾ã™ï¼Ž set xtics 0,0.1 ã®æ§˜ã«2ã¤ä¸Žãˆã‚‹ã¨æœ€åˆã®æ•°å—ãŒåˆæœŸå€¤ï¼Œ 2番目ãŒå¢—分ã«ãªã‚Šã¾ã™ï¼Žä¸ŽãˆãŸæ•°å—ãŒ3ã¤ãªã‚‰ï¼Œ3番目ãŒæœ€çµ‚値ã«ãªã‚Šã¾ã™ï¼Ž å°ã•ã„目盛ã¯ï¼Œset m{x|y}tics ã§ï¼Œå¤§ãã„目盛を何分割ã™ã‚‹ã‹ã‚’与ãˆã¾ ã™ï¼Žã“ã“ã§ã®ä¾‹ãªã‚‰5分割ã§ã™ï¼Žå°ç›®ç››ã®æ‰€ã«ã¯æ•°å—ã¯æ›¸ã‹ã‚Œã¾ã›ã‚“. gnuplot> set xtics 1 gnuplot> set mxtics 5 gnuplot> set ytics 0.5 gnuplot> set mytics 5 gnuplot> replot 完æˆã“ã‚Œã§å®Œæˆã§ã™ï¼Žçµæžœã‚’PostScriptã«ã—ã¦ï¼Œå°åˆ·ã—ã¦ã¿ã¾ã—ょã†ï¼Ž ã¾ãšï¼Œå‡ºåŠ›ãƒ‰ãƒ©ã‚¤ãƒã‚’postscriptã«ã—ã¾ã™ï¼Žæ¬¡ã«çµæžœã‚’出力ã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«åã‚’ set output ã§ä¸Žãˆï¼Œreplotã—ã¾ã™ï¼Žã“ã®ã¾ã¾gnuplotを終ã£ã¦ã—ã¾ã†ã¨ï¼Œ ã„ã¾ã¾ã§ã®ä½œæ¥ãŒç„¡ããªã£ã¦ã—ã¾ã„ã¾ã™ï¼Žsaveを使ã£ã¦é©å½“ãªãƒ•ã‚¡ã‚¤ãƒ«(ã“ã“ã§ã¯ output.plt ã¨ã„ã†åå‰)ã«ä¿å˜ã™ã‚‹ã¨ï¼Œã“ã“ã¾ã§ã® 作æ¥å†…容ãŒãƒ•ã‚¡ã‚¤ãƒ«ã«æ®‹ã‚Šã¾ã™ï¼Ž gnuplot> set term postscript gnuplot> set output "output.ps" gnuplot> replot gnuplot> save "output.plt" gnuplot> quit 出æ¥ä¸ŠãŒã£ãŸoutput.psã‚’PostScriptプリンタã«é€ã‚Œã°ï¼Œå°åˆ·ã§ãã¾ã™ï¼Ž ã¾ãŸghostviewã‚„gvを使ãˆã°ï¼Œå†…容をプレビューã§ãã¾ã™ï¼Žä¸‹ã®ã‚¤ãƒ¡ãƒ¼ã‚¸ã¯ï¼Œ gvã§output.psã‚’ç”»é¢ã«è¡¨ç¤ºã—ãŸã‚‚ã®ã§ã™ï¼Ž ![]() 縮å°ã—ã¦ã„ã‚‹ã®ã§è¦‹ãˆã«ãã„ã¨ã¯æ€ã„ã¾ã™ãŒï¼Œã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã§ã¯èµ¤ã„ç·šã 㣠ãŸã‚‚ã®ã¯å®Ÿç·šï¼Œç·‘ã¨é’ãŒé•·ã•ã®é•ã†ç ´ç·šã«å¤‰ã‚ã£ã¦ã„ã¾ã™ï¼Žã“ã®æ§˜ã«gnuplot ã§ã¯ï¼Œå‡ºåŠ›ãƒ‰ãƒ©ã‚¤ãƒã«ã‚ˆã£ã¦ï¼Œç·šã‚„記å·ã®ç¨®é¡žãŒå¤‰ã‚ã‚Šã¾ã™ï¼Žã©ã®ç•ªå·ãŒã©ã® 種類ã«å¯¾å¿œã—ã¦ã„ã‚‹ã®ã‹ã¯ï¼Œtest ã¨ã—ã¦ã¿ã‚‹ã¨åˆ†ã‹ã‚Šã¾ã™ï¼Žä¾‹ãˆã°Xウィンドウ ã§ã¯ï¼Œæ¬¡ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ï¼Ž gnuplot> set term x11 gnuplot> test ![]() |