GMT 関連記事は,「WindowsでGMT」に移動しました. 目次の中では,項目のみ,下段に集めて「Windows で GMT」にリンクを張ってあります.
2次元定常飽和-不飽和浸透流解析プログラムを改良しました.浸透流のプログラムはサブルーチン数も応力解析に比べれば少ないので,三角形要素用と四角形要素用のプログラムを1つにまとめました.三角形要素と四角形要素の混合には対応していません.また解析結果を一目で確認できるよう,作図プログラムも整備してみました. 作図プログラムといっても,gnuplot 用のスクリプトを吐き出すもので,作図は gnuplot が行います.
(2012.07.03修正)水平断面の飽和浸透流解析も可能なようプログラムを修正.
ファイル名 | 概要 |
---|---|
f90_SEEPSU.txt | 2次元定常飽和-不飽和浸透流解析プログラムソース |
f90_NUMseep.txt | 節点番号最適化プログラムソース |
f90_DRAWseep.txt | メッシュ図・圧力分布図・流速ベクトル出力プログラムソース |
f90_PQ.txt | 圧力・流量出力プログラムソース(汎用性はない) |
pdfUNSAT.pdf | 解析事例紹介 |
これもこれまで欲しかったプログラムです.2次元定常飽和-不飽和浸透流解析用の節点番号最適化プログラムを Fortran90 で作りました. 三角形要素モデル版と四角形要素モデル版です.節点番号最適化を行わないメッシャーで作成した入力データに対し,効果があります.
このプログラムの主要サブルーチンは,こちら(http://www.archi.hiro.kindai.ac.jp/laboratory/SAL/dfujii/Report/fem/fem_5.pdf)に掲載されていたものを,Fortran90に書き換えました.この方法のほかにも,節点番号を原点から近い順に並び替える,あるいはx軸座標の小さい順に並べ替えるなどの方法でもそれなりの成果は得られます. データの入出力部分を書き換えることにより,色々なFEMプログラムで応用できます.
ファイル名 | 概要 |
---|---|
f90_NUM3seep.txt | 2次元定常飽和-不飽和浸透流解析用節点番号最適化プログラムソース(三角形要素) |
f90_NUM4seep.txt | 2次元定常飽和-不飽和浸透流解析用節点番号最適化プログラムソース(四角形要素) |
これまで欲しかったけどなかなか作成できなかった,2次元定常飽和-不飽和浸透流解析プログラムを Fortran90 で作りました. 三角形要素モデル版と四角形要素モデル版です. 解析事例は,「[f90 prog] Fortran90 プログラム(6)」に移しました.
ファイル名 | 概要 |
---|---|
f90_SEEP3nodSU.txt | 2次元定常飽和-不飽和浸透流解析プログラムソース(三角形要素) |
f90_SEEP4nodSU.txt | 2次元定常飽和-不飽和浸透流解析プログラムソース(四角形要素) |
この週末は,2次元非定常熱伝導解析プログラムを Fortran90 に直してみました.
ファイル名 | 概要 |
---|---|
f90_FEMondoCH.txt | 2次元非定常熱伝導解析プログラムソース |
この週末は,3つ Fortran90 のプログラムを作ってみました. 作ったといっても,VB と C のコードから,文法をインターネットで調べながら変換していったものです.
サージング計算では,変数をgrovalにしているものが多いので,この部分はmoduleという機能を使ってみました. 結果としてうまく動くようです.
ファイル名 | 概要 |
---|---|
f90_FEM4nodTS.txt | 2次元応力解析no-tensionプログラムソース |
f90_FEM4nodASTS.txt | 軸対称応力解析no-tensionプログラムソース |
f90_SURGE.txt | サージング解析プログラムソース |
必要に迫られて,円弧すべり計算プログラムを作成しました.
実行時には,下のように,入力ファイル(例:inp_62500.csv)と出力ファイル(例:out_62500.csv)を指定します.
gccSCAsearch inp_62500.csv out_62500.csv |
入力ファイル(例:inp_62500.csv)は以下の構成のcsvファイルです.
18.0,62.5,0.0 材料の単位体積重量,粘着力,内部摩擦角 0.1,0.1,50.0,71.0 x軸計算ピッチ,円弧半径計算ピッチ,計算円弧最大半径,計算円弧最低標高 -5.0,7,76.0,14,1.0 円弧中心グリッド最小x座標,x方向グリッド数,グリッド最小y座標,y方向グリッド数,グリッド間隔 6 地形入力座標数 -5.0,71.0 地形x座標,地形y座標 0.0,71.0 2.5,76.0 (左から右の順に入力) 3.5,76.0 (垂直壁があると計算できない) 5.0,79.0 17.0,79.0 |
ファイル名 | 概要 |
---|---|
a.bat | 最小安全率検索実行用バッチファイル |
gccSCAsearch.c | 円弧すべり計算プログラム(最小安全率円弧検索) |
inp_62500.csv | 入力データ(1) |
inp_43720.csv | 入力データ(2) |
inp_36030.csv | 入力データ(3) |
pdf_SCA_fig.pdf | 解析結果出力事例 |
実行時には,下のように,入力ファイル(例:inp_one_20000_Y.csv)と画像出力epsファイル(例:fig_one_20000_Y.eps)を指定します.
gccSCAone inp_one_20000_Y.csv fig_one_20000_Y.eps |
入力ファイル(例:inp_one_20000.csv)は以下の構成のcsvファイルです.
18.0,20.0,0.0 材料の単位体積重量,粘着力,内部摩擦角 0.1,-5.0,81.0,11.0,71.0 x軸計算ピッチ,円弧中心x座標,円弧中心y座標,円弧半径,計算円弧最低標高 6 地形入力座標数 -5.0,71.0 地形x座標,地形y座標 0.0,71.0 2.5,76.0 (左から右の順に入力) 3.5,76.0 (垂直壁があると計算できない) 5.0,79.0 17.0,79.0 |
ファイル名 | 概要 |
---|---|
b.bat | 個別円弧安全率計算実行用バッチファイル |
gccSCAone.c | 円弧すべり計算プログラム(個別安全率計算) |
inp_one_20000_Y.csv | 入力データ(1) |
inp_one_20000_K.csv | 入力データ(2) |
急に思い立って,昨日と今日で Fortran90 でプログラムを2つ作ってみました. 作ったといっても,VB と C のコードから,文法をインターネットで調べながら変換していったものです.
コーディングの参考にしたのは以下のサイトです.アップしたプログラムでは,Fortran入門に掲載されている,csvデータから余分な空白を除いて出力するサブルーチンを使用させていただいています.
Fortran入門 |
Fortran90プログラミング |
Fortran 標準コーディングルール |
コンパイラは,MinGW の gfortran です. 通常のコンパイルだと,計算スピードは C のほうが圧倒的に早いです.
コンパイルと実行は,以下のバッチファイルで行っています. 入力ファイルは fnameR.csv,出力ファイルは fnameW.csv に統一しています. このため,下の事例では,別途作った inp_elm_036.csv を fnameR.csv にコピーして f90_FEM4nod.exe を実行し,出力された fnameW.csv を out_elm_036.csv にコピーしています.
gfortran -o f90_FEM4nod.exe f90_FEM4nod.f90 copy inp_elm_036.csv fnameR.csv f90_FEM4nod copy fnameW.csv out_elm_036.csv |
ファイル名 | 概要 |
---|---|
f90_FEM4nod.txt | 2次元弾性応力解析プログラムソース |
f90_FRAME.txt | 平面骨組解析プログラムソース |
HTML で棒グラフを作成・表示します. 棒グラフの作成・表示方法は,こちらのページ (http://allabout.co.jp/gm/gc/23817/2/)を参考にさせていただきました.
このサンプルの作成手順は以下のとおりです.
2012年4月8日午前9時現在の状況です.
index.html 3663 アクセス状況 link.html 106 アクセス状況 profile.html 251 アクセス状況 rireki.html 384 アクセス状況 subFONT.html 434 アクセス状況 subIMcol.html 79 アクセス状況 subIMcom.html 572 アクセス状況 subIMdraw.html 354 アクセス状況 subIMfont.html 267 アクセス状況 subPNGcolor.html 3204 アクセス状況 subTeX.html 308 アクセス状況 subgnuplot1-1.html 1961 アクセス状況 subgnuplot1-2.html 674 アクセス状況 subgnuplot2-1.html 1382 アクセス状況 subgnuplot2-2.html 845 アクセス状況 subvbbook.html 300 アクセス状況 subvbhatch.html 203 アクセス状況 subvbpro1.html 3552 アクセス状況 subvbpro2.html 1474 アクセス状況 subvbpro3.html 1671 アクセス状況 subvbpro4.html 3043 アクセス状況 subvbpro5.html 3094 アクセス状況 subvbpro6.html 2104 アクセス状況 subvbpro7.html 1742 アクセス状況 subvbpro8.html 844 アクセス状況 subvbsouko.html 2143 アクセス状況 subwebcolor.html 222 アクセス状況 subwebcolor140.html 180 アクセス状況 |
{item[NR]=$1;num[NR]=$2} END{ nd=NR str=FILENAME switch(substr(str,5,2)){ case "01": mo="January";break; case "02": mo="February";break; case "03": mo="March";break; case "04": mo="April";break; case "05": mo="May";break; case "06": mo="June";break; case "07": mo="July";break; case "08": mo="August";break; case "09": mo="September";break; case "10": mo="October";break; case "11": mo="November";break; case "12": mo="December";break; } printf "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n" printf "<html lang=\"ja\">\n" printf "<head>\n" printf "<link rel=\"stylesheet\" type=\"text/css\" href=\"csmain.css\">\n" printf "</head>\n" printf "<body>\n" printf "<table>\n" printf "<tr><th colspan=\"3\">%s. %s. %s. %s</th></tr>\n",substr(str,1,4),mo,substr(str,7,2),substr(str,9,4) for(i=1;i<=nd;i++){ printf "<tr><td>%s</td><td>%d</td><td><img src=\"gif_bar.gif\" width=\"%d\" height=\"12\" alt=\"bar\"></td></tr>\n",item[i],num[i],num[i]/10 } printf "</table>\n" printf "</body>\n" printf "</html>\n" } |
convert -size 10x10 gradient:snow-green gif_bar.gif gawk -f awk_tbl.awk 2012040809am.txt > test.html |
ImageMagickのconvertによりグラフに用いる画像gif_bar.gifを作成.この画像は,横長棒グラフを作成する上で,上が雪色(snow)・下が緑(green)のグラデーション画像として作成・保存する.
awkの実行により,test.htmlを作成する.
CSSは,このホームページで使用しているものとなっています.
2012. April. 08. 09am | ||
---|---|---|
index.html | 3663 | |
link.html | 106 | |
profile.html | 251 | |
rireki.html | 384 | |
subFONT.html | 434 | |
subIMcol.html | 79 | |
subIMcom.html | 572 | |
subIMdraw.html | 354 | |
subIMfont.html | 267 | |
subPNGcolor.html | 3204 | |
subTeX.html | 308 | |
subgnuplot1-1.html | 1961 | |
subgnuplot1-2.html | 674 | |
subgnuplot2-1.html | 1382 | |
subgnuplot2-2.html | 845 | |
subvbbook.html | 300 | |
subvbhatch.html | 203 | |
subvbpro1.html | 3552 | |
subvbpro2.html | 1474 | |
subvbpro3.html | 1671 | |
subvbpro4.html | 3043 | |
subvbpro5.html | 3094 | |
subvbpro6.html | 2104 | |
subvbpro7.html | 1742 | |
subvbpro8.html | 844 | |
subvbsouko.html | 2143 | |
subwebcolor.html | 222 | |
subwebcolor140.html | 180 |
鉄筋コンクリートの応力計算を行うCプログラムです. やはり手元に欲しいツールなので作っておきました.
軸力,曲げ,せん断力を受ける円形充実鉄筋コンクリート断面の応力計算を行います.
Cプログラムのコンパイルと実行を行うバッチファイルの内容は以下の通りです.
gcc -o gccRC_circ.exe gccRC_circ.c gccRC_circ dat_inp_RC_c.csv dat_out_RC_c.csv |
入力データ並びは以下の書式です.
r, rs, As, n, N, M, S |
r, rs, As, n, N, M, S = 断面半径,鉄筋重心半径,鉄筋断面積,弾性係数比,軸力,モーメント,せん断力
出力データ並びは以下の書式です.
r, rs, As, n, N, M, S, sig_c, sig_s', sig_c', sig_s, tau_c, alpha(deg.), yn |
r, rs, As, n, N, M, S = 入力データに同じ.
sig_c, sig_s', sig_c', sig_s = 圧縮縁コンクリート応力,圧縮鉄筋応力,引張縁コンクリート応力,引張鉄筋応力
tau_c , alpha(deg.) , yn = コンクリートせん断応力,中立軸位置(角度),中立軸位置(圧縮縁からの距離)
なお,コンクリートせん断応力は単純化のため,作用せん断力を,圧縮縁から引張応力が最大の鉄筋まで断面積により除して求めています.
ファイル名 | 概要 |
---|---|
gccRC_circ.txt | 計算用Cプログラムソース |
dat_inp_RC_c.csv | 入力データファイル |
dat_out_RC_c.csv | 出力データファイル |
曲げ,せん断力を受ける矩形充実鉄筋コンクリート断面の応力計算を行います.
Cプログラムのコンパイルと実行を行うバッチファイルの内容は以下の通りです.
gcc -o gccRC_circ.exe gccRC_circ.c gccRC_circ dat_inp_RC_c.csv dat_out_RC_c.csv |
入力データ並びは以下の書式です.
icase,b,d,As,d',As',n,M,S |
icase, b, d, As, d', As', n, M, S = ケース,断面幅,引張鉄筋有効高さ,引張鉄筋断面積,圧縮鉄筋有効高さ,圧縮鉄筋断面積,弾性係数比,モーメント,せん断力
icase = 0 は単鉄筋断面,icase = 1 は複鉄筋断面の計算です.
出力データ並びは以下の書式です.
icase, b, d, As, d', As', n, M, S, sig_c, sig_s', sig_c', sig_s, tau_c, x |
icase, b, d, As, d', As', n, M, S = 入力データに同じ.
sig_c, sig_s', sig_c', sig_s = 圧縮縁コンクリート応力,圧縮鉄筋応力,引張縁コンクリート応力,引張鉄筋応力
tau_c, x = コンクリートせん断応力,中立軸位置(圧縮縁からの距離)
ファイル名 | 概要 |
---|---|
gccRC_rect.txt | 計算用Cプログラムソース |
dat_inp_RC_r.csv | 入力データファイル |
dat_out_RC_r.csv | 出力データファイル |
GMT で対数ピアソンIII型分布での推定値の図を描く事例です. 解析の入力データは,統計解析(1)(2)と同じ,前橋市の過去 114 年間の年最大日雨量です.
ここでは,対数ピアソンIII型分布において,確率年雨量(クオンタイル)を算出するのに,ガンマ分布の%点からの推定とWilson-Hilferty変換による推定での差異を検討しました.bootstrap法により1000個のbootstrap反復値を計算し,これより14確率年のクオンタイルを計算する試行を5回行った結果を図化しました. 横軸は対数ピアソンIII型分布における形状母数 ( b ) ,縦軸はWilson-Hilferty変換による推定値とガンマ分布%点からの推定値の比をとっています.この事例からすれば b の値が1000を超えると両者の違いは目立たなくなるようです.
ファイル名 | 概要 |
---|---|
gccTES1_LP3.txt | 解析用Cプログラムソース |
bat_TES1_LP3.txt | 作図用バッチファイル |
fig_TES1_LP3.png | 出力画像 |
また練習として対数ピアソンIII型分布での棄却検定を行うプログラムを作成してみました.入力データの最大値を棄却すべきか採用すべきかの検定です. 母数推定を行った後,形状母数が10000未満かそれ以上かで,検定対象値の超過確率計算方法をガンマ分布によるものとWilson-Hilferty変換によるものに分けています. この場合,%点が求まりこれから超過確率(上側確率:しかしプログラム上は非超過確率を計算)を求める必要があります.ガンマ分布の場合は%点を求めるプログラムを改良して非超過確率を求め,Wilson-Hilferty変換を用いる場合標準正規分布に変換するのでShentonの連分数展開式で上側確率を求めています.
ファイル名 | 概要 |
---|---|
gccSFT_LP3.txt | 解析用Cプログラムソース |
out_SFT.txt | 出力結果ファイル |
GMT で統計解析結果を描く事例です. 解析の入力データは,統計解析(1)と同じ,前橋市の過去 114 年間の年最大日雨量です. 全原データによる推定値と,bootstrap 法による推定値をプロットしてみました. グラフを見比べると jackknife 法と同様に2変数の確率分布関数の場合と比較して3変数のものは値が大きくバラツキも大きくなる傾向にあるようです.図中の95%信頼区間は,もっとも単純なパーセンタイル法(推定値を小さい順に並べて下から2.5%の点と上から2.5%の点を限界とする)にて求めています.
対数ピアソンIII型分布(LP3)において,形状母数が大きくなるとガンマ分布%点計算が収束しなくなるので,この場合にはWilson-Hilferty(ウィルソン・ヒルファティ)変換という近似式を用いて確率年雨量を算出しています.近似式を使う境界の形状母数は 10,000 としています. こうすることで,対数ピアソンIII型の計算時間は短縮され,収束計算を繰り返さざるを得ない SQRT-ET がもっとも計算時間を食っています.
統計解析(1)から(4)で使用しているプログラム作成のための数式は,下の文書に整理してあります.
確率分布と水文統計量の求め方 | プログラム作成のための数式:pdf文書 |
描画用データ作成のための C 実行ファイルへの命令は以下のようなものです.argv[1]に分布を指定する整数,argv[2]に入力ファイル,argv[3]に数値出力ファイル,argv[4]にヒストグラム用の数値出力ファイルを指定しています.ここでは,ある確率年における bootstrap 推定値のヒストグラムを書かせています.繰り返し回数は,10,000 回です.1,000 回も繰り返せば信頼区間幅の乱れも気にならない程度になりますし,ヒストグラムもまずまずですが,どうせ計算機がやる仕事なので欲張ってみました.
gccBTS 1 inp_PRB.txt out_B_GUM.txt inp_BH_GUM.txt Gumbel分布(Gumbel) gccBTS 2 inp_PRB.txt out_B_GEV.txt inp_BH_GEV.txt 一般化極値分布(GEV) gccBTS 3 inp_PRB.txt out_B_SQR.txt inp_BH_SQR.txt 平方根指数型最大値分布(SQRT-ET) gccBTS 4 inp_PRB.txt out_B_LN3.txt inp_BH_LN3.txt 3パラメータ対数正規分布(LN3) gccBTS 5 inp_PRB.txt out_B_LP3.txt inp_BH_LP3.txt 対数ピアソンIII型分布(LP3) |
ファイル名 | 概要 |
---|---|
gccBTS.txt | 解析用Cプログラムソース |
out_B_GUM.txt | Cプログラムの出力データ |
out_B_GEV.txt | Cプログラムの出力データ |
out_B_SQR.txt | Cプログラムの出力データ |
out_B_LN3.txt | Cプログラムの出力データ |
out_B_LP3.txt | Cプログラムの出力データ |
bat_BTS.txt | 作図用バッチファイル |
inp_legend_BTS.txt | 凡例用入力ファイル |
fig_B_GUM.png | 出力画像(1) |
fig_B_GEV.png | 出力画像(2) |
fig_B_SQR.png | 出力画像(3) |
fig_B_LN3.png | 出力画像(4) |
fig_B_LP3.png | 出力画像(5) |
bat_BHI.txt | ヒストグラム作図用バッチファイル |
fig_BH_GUM.png | ヒストグラム画像(1) |
fig_BH_GEV.png | ヒストグラム画像(2) |
fig_BH_SQR.png | ヒストグラム画像(3) |
fig_BH_LN3.png | ヒストグラム画像(4) |
fig_BH_LP3.png | ヒストグラム画像(5) |
GMT で計測値を3母数Weibull分布に適合させた時の相関図を描く事例です. 解析の入力データは,統計解析(1)(2)と同じ,前橋市の過去 114 年間の年最大日雨量です.
適合は,以下の3方法で行ってみました.
ここで,L積法の「合田らの方法」とは, 文献「合田良実・久高将信・河合弘泰:L-moments法を用いた波浪の極値統計解析について,土木学会論文集B2(海岸工学),Vol.B2-65 No.1,2009,pp161-165」 によるものです.
この事例の結果によると,最小二乗法で決定した母数よりも最尤法で求めた母数のほうが推定精度は高いようです.
ファイル名 | 概要 |
---|---|
gccWEI.txt | 解析用Cプログラムソース |
out_WEI.txt | Cプログラムの出力データ |
bat_WEI.txt | 作図用バッチファイル |
inp_legend.txt | 凡例用入力ファイル |
fig_WEI.png | 出力画像(1) |
GMT の統計解析で用いている自分で打ち込んだ関数の精度の確認を行いました. 何と比較して精度を確認するかが問題になりますが,Excel の計算結果というのもさびしいので,「GNU Scientific Library : GNU科学技術計算ライブラリ (GSL)」の結果と比較することにしました.ライブラリのインストール,コンパイル方法,ライブラリ関数の使用方法は以下のサイトの情報によります.
サイト | 概要 |
---|---|
MinGWで使うGSL(Windowsでのフリーソフトによる数値計算環境の構築) | ライブラリのバイナリ,インストール方法,コンパイル方法の解説 |
GNU Scientific Libraryリファレンス・マニュアル 日本語訳 | ライブラリの関数の使い方 |
Cプログラムのコンパイルと実行を行うバッチファイルの内容は以下の通りです.
gcc -Wall -o gccFUNC_gsl.exe gccFUNC_gsl.c -lgsl -lgslcblas gccFUNC_gsl |
ファイル名 | 概要 |
---|---|
gccFUNC_gsl.txt | Cプログラムソース |
out_FUNC_gsl.txt | Cプログラムの出力データ |
比較の結果は以下の通りです._gsl がGSLの関数値, _m が自分で打ち込んだ関数値です.差分を見ると小数点以下 3 桁以上の精度はあるので WANtaro としては満足です.
Gamma関数の値 | |||
---|---|---|---|
x | Γ(x)_gsl | Γ(x)_m | gsl-me |
0.1 | 9.513508 | 9.513508 | -1.766816e-015 |
0.3 | 2.991569 | 2.991569 | +1.069457e-015 |
0.5 | 1.772454 | 1.772454 | +5.150719e-015 |
0.7 | 1.298055 | 1.298055 | +9.689515e-016 |
1.0 | 1.000000 | 1.000000 | +3.618525e-015 |
1.1 | 0.951351 | 0.951351 | +4.843673e-016 |
1.3 | 0.897471 | 0.897471 | +4.133521e-016 |
1.5 | 0.886227 | 0.886227 | +3.019449e-015 |
1.7 | 0.908639 | 0.908639 | +1.247483e-015 |
2.0 | 1.000000 | 1.000000 | +3.618525e-015 |
2.5 | 1.329340 | 1.329340 | +4.547469e-015 |
3.0 | 2.000000 | 2.000000 | +7.237050e-015 |
3.5 | 3.323351 | 3.323351 | +1.111069e-014 |
5.0 | 24.000000 | 24.000000 | +8.684373e-014 |
7.5 | 1871.254306 | 1871.254306 | +5.353828e-012 |
9.5 | 119292.461995 | 119292.461995 | +2.938378e-010 | Gamma分布の%点(b=11) |
p | x(p)_gsl | x(p)_m | gsl-me |
0.9 | 15.406641 | 15.406641 | -2.314804e-009 |
0.91 | 15.653565 | 15.653565 | -1.093330e-010 |
0.93 | 16.226314 | 16.226314 | -1.812200e-009 |
0.95 | 16.962219 | 16.962219 | -2.065470e-009 |
0.97 | 18.024575 | 18.024575 | -6.673954e-009 |
0.99 | 20.144680 | 20.144680 | +4.554781e-009 |
0.991 | 20.338768 | 20.338769 | -3.032392e-008 |
0.993 | 20.796308 | 20.796308 | -1.210791e-008 |
0.995 | 21.397827 | 21.397828 | -3.490386e-008 |
0.997 | 22.289496 | 22.289496 | -4.706427e-008 |
0.999 | 24.133971 | 24.133971 | -5.763084e-008 |
0.9991 | 24.306356 | 24.306356 | -1.404332e-007 |
0.9993 | 24.714722 | 24.714722 | -1.700913e-007 |
0.9995 | 25.255559 | 25.255560 | -2.160290e-007 |
0.9997 | 26.064727 | 26.064727 | -2.387908e-008 |
0.9999 | 27.762294 | 27.762297 | -2.473674e-006 | 標準正規分布の%点 |
p | x(p)_gsl | x(p)_m | gsl-me |
0.9 | 1.281552 | 1.281552 | +6.084597e-009 |
0.91 | 1.340755 | 1.340755 | +7.420276e-010 |
0.93 | 1.475791 | 1.475791 | -1.246255e-008 |
0.95 | 1.644854 | 1.644854 | -1.965689e-008 |
0.97 | 1.880794 | 1.880794 | +1.848262e-009 |
0.99 | 2.326348 | 2.326348 | +7.981440e-009 |
0.991 | 2.365618 | 2.365618 | +8.934213e-010 |
0.993 | 2.457263 | 2.457263 | -1.607723e-008 |
0.995 | 2.575829 | 2.575829 | -3.069485e-008 |
0.997 | 2.747781 | 2.747781 | -1.993342e-008 |
0.999 | 3.090232 | 3.090232 | +3.718253e-008 |
0.9991 | 3.121389 | 3.121389 | +3.457654e-008 |
0.9993 | 3.194651 | 3.194651 | +2.092817e-008 |
0.9995 | 3.290527 | 3.290527 | -7.545326e-009 |
0.9997 | 3.431614 | 3.431614 | -4.091656e-008 |
0.9999 | 3.719016 | 3.719016 | +3.492103e-008 |
GMT で統計解析結果を描く事例です. 解析の入力データは,統計解析(1)と同じ,前橋市の過去 114 年間の年最大日雨量です. 全原データによる推定値と,Jackknife法による偏りを補正した推定値をプロットしてみました. なお,グラフでは5000年確率雨量まで計算してありますが,これはあくまで計算の練習です.114年間のデータから外挿した5000年確率雨量を信じるかどうかは別問題でしょう(他に方法がなければ信じる?).グラフを見比べると2変数の確率分布関数の場合と比較して3変数のものは値が大きくバラツキも大きくなる傾向にあるようです.
対数ピアソンIII型分布(LP3)において,「現場のための水文統計(2)」のガンマ分布%点算出プログラムでは,確率年が大きくなった時,Jackknife法による推定値が暴れるので,収束判定基準を10^(-10)オーダーに変更しています.原プログラムはFORTRAN単精度用のようです.Cプログラムでは実数は全て倍精度にしています.(2011/04/29)
awkによる凡例作成用スクリプトもフォント変更指定などを入れたとき,字数を長くカウントしすぎないよう,修正しました.(2011/04/29)
描画用データ作成のためのC実行ファイルへの命令は以下のようなものです.argv[1]に分布を指定する整数,argv[2]に入力ファイル,argv[3]に数値出力ファイル,argv[4]にヒストグラム用の数値出力ファイルを指定しています.ここでは,参考のため,ある確率年における(N-1)個のデータから算定したN個の推定値のヒストグラムを書かせています.
gccJKK 1 inp_PRB.txt out_J_GUM.txt inp_JH_GUM.txt Gumbel分布(Gumbel) gccJKK 2 inp_PRB.txt out_J_GEV.txt inp_JH_GEV.txt 一般化極値分布(GEV) gccJKK 3 inp_PRB.txt out_J_SQR.txt inp_JH_SQR.txt 平方根指数型最大値分布(SQRT-ET) gccJKK 4 inp_PRB.txt out_J_LN3.txt inp_JH_LN3.txt 3パラメータ対数正規分布(LN3) gccJKK 5 inp_PRB.txt out_J_LP3.txt inp_JH_LP3.txt 対数ピアソンIII型分布(LP3) |
ファイル名 | 概要 |
---|---|
gccJKK.txt | 解析用Cプログラムソース |
out_J_GUM.txt | Cプログラムの出力データ |
out_J_GEV.txt | Cプログラムの出力データ |
out_J_SQR.txt | Cプログラムの出力データ |
out_J_LN3.txt | Cプログラムの出力データ |
out_J_LP3.txt | Cプログラムの出力データ |
bat_JKK.txt | 作図用バッチファイル |
awk_klegend.txt | 凡例用バッチファイル作成awkスクリプト(修正版) |
inp_legend_JKK.txt | 凡例用入力ファイル |
fig_J_GUM.png | 出力画像(1) |
fig_J_GEV.png | 出力画像(2) |
fig_J_SQR.png | 出力画像(3) |
fig_J_LN3.png | 出力画像(4) |
fig_J_LP3.png | 出力画像(5) |
bat_JHI.txt | ヒストグラム作図用バッチファイル |
fig_JH_GUM.png | ヒストグラム画像(1) |
fig_JH_GEV.png | ヒストグラム画像(2) |
fig_JH_SQR.png | ヒストグラム画像(3) |
fig_JH_LN3.png | ヒストグラム画像(4) |
fig_JH_LP3.png | ヒストグラム画像(5) |
GMT で統計解析結果を描く事例です.GMTの事例というよりは統計解析のプログラムがメインです. プロットするデータは,気象庁のホームページに掲載されている,前橋市の過去 114 年間の年最大日雨量です.
確率紙プロットで,回帰直線を引いてみましたが,大きいデータの乖離が大きいため,極値解析手法により,回帰し直してみました.Gumbel分布,一般化極値分布,平方根指数型最大値分布,3パラメータ対数正規分布,対数ピアソンIII型分布(対数ガンマ分布)で試してみましたが,なかなかうまく追えないようです.なお,観測値プロットのためのプロッティングポジション公式はカナン(Cunnane)公式を用いています.
解析理論は,下の文献に大変丁寧に解説されており,これを参考にしました.ガンマ分布の%点を計算するプログラムも,「現場のための水文統計(2)」に掲載の FORTRAN プログラムを C に書き直して使わさせていただいています.
ファイル名 | 概要 |
---|---|
gccSTA.txt | 解析用Cプログラムソース |
inp_PRB.txt | 年最大日雨量入力データ |
out_PRB.txt | Cプログラムの出力データ |
bat_STA.txt | 作図用バッチファイル |
fig_PRB_GUM.png | 出力画像(1) |
fig_PRB_GEV.png | 出力画像(2) |
fig_PRB_SQR.png | 出力画像(3) |
fig_PRB_LN3.png | 出力画像(4) |
fig_PRB_LP3.png | 出力画像(5) |
GMT で地震動をグラフ化するための C 言語プログラムソースと連続処理用バッチファイルの事例です. 地震波の加速度時刻歴データは,防災科学技術研究所が運営する KiK-net および K-net からダウンロードさせていただいたものを使用しています.
ファイル名 | 概要 |
---|---|
MYG004_TCGH16.zip | KiK-net, K-net の記録 |
gccKIK2CSV.txt | データ書式作成用Cプログラムソース |
gccEQSP.txt | 応答スペクトル計算用Cプログラムソース |
gccCALFSR.txt | フーリエスペクトル比計算用Cプログラムソース |
bat_eqdata.txt | 連続処理用バッチファイル |
個人用の TeX テストファイルです.TeX のバージョンアップ時などに挙動テストを行っています.dvipdfm or dvipdfmx で pdf 化した時,arc や circle があると変な線が入る問題は解決できていません.現在は逆にこれらを使わないようにしています.
ファイル名 | 概要 |
---|---|
bbb.tex | TeX ソース |
picgrtest0.png | テスト用png画像 |
pickurobe.jpg | テスト用jpg画像(1) |
pickurobe.bb | テスト用jpg画像bbファイル(1) |
pictateyama.jpg | テスト用jpg画像(2) |
pictateyama.bb | テスト用jpg画像bbファイル(2) |
緯度・経度から距離を計算する C 言語のプログラムのサンプルです. 「Lambert-Andyer の公式」 「Hubeny の公式」 で作成してみました. こちらのサイト でも面白い実験をしています.実はこのサイトを見てこのプログラムを作ろうと思ったのでした.運営者さんに感謝です.
/*===========================*/ /* gccTipsDIST.c */ /*===========================*/ /*緯度・経度による2点間距離計算*/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> double DLA(double a,double b,double ido1,double keido1,double ido2,double keido2); double DHB(double a,double b,double ido1,double keido1,double ido2,double keido2); /*--------------------------------------------------------------------------*/ int main() { /*double a=6377397.155; 赤道半径(m) 旧日本測地系*/ /*double b=6356079.000; 極半径(m) 旧日本測地系*/ double a=6378137.000000; /*赤道半径(m) 世界測地系*/ double b=6356752.314140; /*極半径(m) 世界測地系*/ double d1,d2; double ido1,keido1; double ido2,keido2; ido1=36.0+ 6.0/60.0+ 2.0/3600.0; keido1=140.0+ 5.0/60.0+28.0/3600.0; ido2=35.0+39.0/60.0+18.0/3600.0; keido2=139.0+44.0/60.0+41.0/3600.0; /* 国土交通省サイト例題(つくば〜東京間距離) http://vldb.gsi.go.jp/sokuchi/surveycalc/bl2stf.html 出発点:北緯 36度 06分 02.0秒 東経 140度 05分 28.0秒 到達点:北緯 35度 39分 18.0秒 東経 139度 44分 41.0秒 測地線長 58,501.873m */ d1=DLA(a,b,ido1,keido1,ido2,keido2); d2=DHB(a,b,ido1,keido1,ido2,keido2); printf("%.6f km\n",d1/1000.0); printf("%.6f km\n",d2/1000.0); } /*--------------------------------------------------------------------------*/ double DLA(double a,double b,double ido1,double keido1,double ido2,double keido2) { /*Lambert-Andyer の公式*/ double IA,LA; /*A点緯度および経度*/ double IB,LB; /*B点緯度および経度*/ double phiA,phiB,XX,delta; double rho;/*2点間距離*/ double FF; /*扁平率*/ IA=ido1/180.0*M_PI; LA=keido1/180.0*M_PI; IB=ido2/180.0*M_PI; LB=keido2/180.0*M_PI; FF=(a-b)/a; phiA=atan((1.0-FF)*tan(IA)); phiB=atan((1.0-FF)*tan(IB)); XX=acos(sin(phiA)*sin(phiB)+cos(phiA)*cos(phiB)*cos(LA-LB)); delta=FF/8.0* ( (sin(XX)-XX)*pow(sin(phiA)+sin(phiB),2.0)/pow(cos(0.5*XX),2.0) -(sin(XX)+XX)*pow(sin(phiA)-sin(phiB),2.0)/pow(sin(0.5*XX),2.0) ); rho=a*(XX+delta); return rho; } /*--------------------------------------------------------------------------*/ double DHB(double a,double b,double ido1,double keido1,double ido2,double keido2) { /*Hubeny の公式*/ double x1,y1;/*地点1の経度および緯度*/ double x2,y2;/*地点2の経度および緯度*/ double dy,dx,my,MM,NN,WW,e; double dd;/*2点間距離*/ y1=ido1/180.0*M_PI; x1=keido1/180.0*M_PI; y2=ido2/180.0*M_PI; x2=keido2/180.0*M_PI; e=sqrt((a*a-b*b)/a/a); my=0.5*(y1+y2); WW=sqrt(1.0-e*e*sin(my)*sin(my)); NN=a/WW; MM=a*(1.0-e*e)/WW/WW/WW; dy=y1-y2; dx=x1-x2; dd=sqrt(pow(dy*MM,2.0)+pow(dx*NN*cos(my),2.0)); return dd; } /*--------------------------------------------------------------------------*/ |
TeX でフローチャートを描くための,Terry Brown 氏による C 言語のプログラム (flow.c , flow.exe) の紹介です.TeX の picture 環境にフローチャートを描くコードを出力します.
詳細を見る |
C 言語の関数 qsort を用いて,構造体をソートする方法です.
/*---------------------------------------------------------*/ /* gccTipsSORTS.c */ /*---------------------------------------------------------*/ /* 構造体のqsort */ /*---------------------------------------------------------*/ #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct{ int idat; char *sdat; double ddat; }FOO; int COMP_SDS(const void *a,const void *b); int COMP_SSS(const void *a,const void *b); /*---------------------------------------------------------*/ int main(void) { int i; FOO dset[10]; i=0;dset[i].idat=i+1;dset[i].sdat="Tokyo" ;dset[i].ddat= 123.5; i=1;dset[i].idat=i+1;dset[i].sdat="Nagoya" ;dset[i].ddat= 99.8; i=2;dset[i].idat=i+1;dset[i].sdat="Yokohama";dset[i].ddat= 10.1; i=3;dset[i].idat=i+1;dset[i].sdat="Nagano" ;dset[i].ddat= 20.5; i=4;dset[i].idat=i+1;dset[i].sdat="Oosaka" ;dset[i].ddat=1000.3; i=5;dset[i].idat=i+1;dset[i].sdat="Sendai" ;dset[i].ddat= 999.8; i=6;dset[i].idat=i+1;dset[i].sdat="Sapporo" ;dset[i].ddat= 30.5; i=7;dset[i].idat=i+1;dset[i].sdat="Akita" ;dset[i].ddat= 400.5; i=8;dset[i].idat=i+1;dset[i].sdat="Fukuoka" ;dset[i].ddat= 600.8; i=9;dset[i].idat=i+1;dset[i].sdat="Maebashi";dset[i].ddat= 3.1; printf("***Before qsort***\n"); for(i=0;i<=9;i++){ printf("%d %s %g\n", dset[i].idat,dset[i].sdat,dset[i].ddat); } qsort(dset,10,sizeof(FOO),COMP_SDS); printf("***After qsort (double)***\n"); for(i=0;i<=9;i++){ printf("%d %s %g\n", dset[i].idat,dset[i].sdat,dset[i].ddat); } qsort(dset,10,sizeof(FOO),COMP_SSS); printf("***After qsort (char)***\n"); for(i=0;i<=9;i++){ printf("%d %s %g\n", dset[i].idat,dset[i].sdat,dset[i].ddat); } return 0; } /*---------------------------------------------------------*/ int COMP_SDS(const void *a,const void *b) { /*構造体ソート*/ /*doubleの変数 (ddat) の小さい順*/ FOO temp1 = *(FOO*)a; FOO temp2 = *(FOO*)b; double p1=temp1.ddat; /*ddatでソート*/ double p2=temp2.ddat; /*小さい順*/ if(p1> p2)return 1; if(p1==p2)return 0; if(p1< p2)return -1; } /*---------------------------------------------------------*/ int COMP_SSS(const void *a,const void *b) { /*構造体ソート*/ /*charの変数 (sdat) の小さい順*/ FOO temp1 = *(FOO*)a; FOO temp2 = *(FOO*)b; char *p1=temp1.sdat; /*sdatでソート*/ char *p2=temp2.sdat; /*小さい順*/ return strcmp(p1,p2); } /*---------------------------------------------------------*/ |
C 言語の関数 qsort を用いて,数値・文字列のソートを行います.
自分で定義する比較関数の戻り値は整数型なので,実数型 (double など) をソートする場合は,戻り値を整数型にする必要があります.
/*-------------------------------------------------------*/ /* gccTipsSORT.c*/ /*-------------------------------------------------------*/ /* qsort の使い方 */ /*-------------------------------------------------------*/ #include <stdio.h> #include <stdlib.h> #include <string.h> /* qsort 比較関数プロトタイプ宣言 */ int COMP_IS(const void *a,const void *b); int COMP_IL(const void *a,const void *b); int COMP_DS(const void *a,const void *b); int COMP_DL(const void *a,const void *b); int COMP_SS(const void *a,const void *b); int COMP_SL(const void *a,const void *b); /*-------------------------------------------------------*/ int main() { int i; int n=12; int idata[]={50,30,90,44,13,46,82,42,70,74,20,62}; double ddata[]={0.50,0.30,0.90,0.44,0.13,0.46,0.82,0.42,0.70,0.74,0.20,0.62}; char *sdata[]={"aa","zz","pp","zzasdfg","gg","CC","bb","nn","zz","mm","kk","ii"}; printf("***Integer***\n"); qsort(idata,n,sizeof(idata[0]),COMP_IS); for(i=0;i<=n-1;i++){ printf("%d\n",idata[i]); } printf("-------------\n"); qsort(idata,n,sizeof(idata[0]),COMP_IL); for(i=0;i<=n-1;i++){ printf("%d\n",idata[i]); } printf("***Double***\n"); qsort(ddata,n,sizeof(ddata[0]),COMP_DS); for(i=0;i<=n-1;i++){ printf("%g\n",ddata[i]); } printf("-------------\n"); qsort(ddata,n,sizeof(ddata[0]),COMP_DL); for(i=0;i<=n-1;i++){ printf("%g\n",ddata[i]); } printf("***String***\n"); qsort(sdata,n,sizeof(sdata[0]),COMP_SS); for(i=0;i<=n-1;i++){ printf("%s\n",sdata[i]); } printf("-------------\n"); qsort(sdata,n,sizeof(sdata[0]),COMP_SL); for(i=0;i<=n-1;i++){ printf("%s\n",sdata[i]); } } /*-------------------------------------------------------*/ int COMP_IS(const void *a,const void *b) { /*小さい順*/ return *(int*)a-*(int*)b; } /*-------------------------------------------------------*/ int COMP_IL(const void *a,const void *b) { /*大きい順*/ return *(int*)b-*(int*)a; } /*-------------------------------------------------------*/ int COMP_DS(const void *a,const void *b) { /*比較関数は戻り値が整数型なので*/ /*整数値を返すようにする*/ /*小さい順*/ if(*(double*)a> *(double*)b)return 1; if(*(double*)a==*(double*)b)return 0; if(*(double*)a< *(double*)b)return -1; } /*-------------------------------------------------------*/ int COMP_DL(const void *a,const void *b) { /*大きい順*/ if(*(double*)b> *(double*)a)return 1; if(*(double*)b==*(double*)a)return 0; if(*(double*)b< *(double*)a)return -1; } /*-------------------------------------------------------*/ int COMP_SS(const void *a,const void *b) { /*小さい順*/ return strcmp(*(char**)a,*(char**)b); } /*-------------------------------------------------------*/ int COMP_SL(const void *a,const void *b) { /*大きい順*/ return strcmp(*(char**)b,*(char**)a); } /*-------------------------------------------------------*/ |
英数字の文字列中の大文字を小文字に,あるいはその逆の処理を行います.
/*---------------------------------------------*/ /* gccTipsHEN.c*/ /*---------------------------------------------*/ /* 文字列中の大文字と小文字の変換 */ /*---------------------------------------------*/ #include <stdio.h> #include <string.h> #include <ctype.h> void TOLOW(char *str); void TOUPP(char *str); /*---------------------------------------------*/ int main() { int i; char dat[50]=""; strcpy(dat,"WANtaroHP"); printf("+++%s+++\n",dat); TOLOW(dat); /*小文字に変換*/ printf("---%s---\n",dat); TOUPP(dat); /*大文字に変換*/ printf("+++%s+++\n",dat); return 0; } /*---------------------------------------------*/ void TOLOW(char *str) { /*小文字に変換*/ int i; for(i=0;i<=strlen(str)-1;i++){ str[i]=tolower(str[i]); } } /*---------------------------------------------*/ void TOUPP(char *str) { /*大文字に変換*/ int i; for(i=0;i<=strlen(str)-1;i++){ str[i]=toupper(str[i]); } } /*---------------------------------------------*/ |
MinGW gcc では popen を使えるので,popen で cmd.exe を実行し,fprintf で色々な文字列や数値を送り込みます.
system 関数にコマンドを入力する方法もありますが,こちらのほうが便利だと思います.
/*---------------------------*/ /* gccTipsCMD.c */ /*---------------------------*/ #include <stdio.h> /*---------------------------------------------------------------------------*/ int main() { char scom[]="dir"; FILE *fp; fp=popen("cmd.exe","w"); fprintf(fp,"%s\n",scom); fflush(fp); pclose(fp); printf("リターンキーを押してください"); getchar(); return 0; } /*---------------------------------------------------------------------------*/ |
このプログラムは NI-Lab. (http://www.nilab.info/zurazure/200304.html) に掲載されていたものを使わさせていただいています.
NI-Lab. さんの原典には含まれていますが,sys/types.h はインクルードしていません.特に問題ないようです.
WANtaroHP(VB & C# 数値処理) のプログラムでは popen でコマンドプロンプトを開き,dirコマンドを送ってファイル名を取得していますが,こちらのほうが美しいです. dirent.h を知っているかどうかですね.
/*--------------------------------------------*/ /* gccTipsWDIR.c */ /*--------------------------------------------*/ /* c:指定したフォルダ内のファイルを表示する */ /* http://www.nilab.info/zurazure/200304.html */ /* MinGW gcc でコンパイル・実行結果では, */ /* .および..とdir名,ファイル名が表示される */ /*--------------------------------------------*/ #include <stdio.h> #include <dirent.h> void test(char *name) { /* DIR構造体へのポインタを宣言 */ DIR *dirp; /* dirent構造体へのポインタを宣言 */ struct dirent *entp; /* DIR構造体へのポインタを得る(引数はパス) */ dirp = opendir(name); /* dirent構造体へのポインタを得る */ while ((entp = readdir(dirp)) != NULL){ /* ファイル名を出力 */ printf("%s\n", entp->d_name); } closedir(dirp); } int main(int argc, char **argv) { if(argc == 1){ test("."); }else{ test(argv[1]); } return 0; } |
ちなみに WANtaro の方法は以下の通り. dirR は読み取るディレクトリ,dirW は結果のファイルを書き出すディレクトリです.
char dirR[100]="c:\\Windows\\Fonts"; char dirW[100]="d:\\20110224\\GNUpro\\gcc7IMfont"; /*フォント名書出用コマンド実行*/ strcpy(fnameW,"font_dir.txt"); fp=popen("cmd.exe","w"); fprintf(fp,"dir %s > %s\\%s\n",dirR,dirW,fnameW); fprintf(fp,"exit\n"); fflush(fp); pclose(fp); |
このプログラムは マイクロソフトサポートオンライン (http://support.microsoft.com/kb/51327/ja) に掲載されていたものを参考にしています.
1 行の中に入っているデータ個数が変化する場合などに便利そうです.
/*---------------------*/ /* gccTipsSTRTOK.c */ /*---------------------*/ /* atok 使用法サンプル */ /*---------------------*/ #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { FILE *fin,*fout; char dat[256]=""; char *token; fin=fopen("inp_STRTOK.txt","r"); fout=fopen("out_STRTOK.txt","w"); while(fgets(dat,sizeof dat,fin)!=NULL){ token=strtok(dat," "); while(token!=NULL){ printf("%s\n",token); fprintf(fout,"%s\n",token); token=strtok(NULL," "); } } fclose(fin); fclose(fout); } |
ファイル名 | 概要 |
---|---|
inp_STRTOK.txt | 入力事例 |
out_STRTOK.txt | 出力事例 |
このプログラムは C言語関数辞典 (http://www.c-tipsref.com/tips/string/o_trim.html) を参考にさせていただきました.
Visual Studio では Trim() があって便利だけど C では自分で作らなければならず,いいものがないか探していたところ,上記サイトを見つけましたので,自分なりにアレンジしてみました.
/*--------------------------------*/ /* gccTipsTRIM.c */ /*--------------------------------*/ /* 先頭と末尾の空白を削除 */ /*--------------------------------*/ #include <stdio.h> #include <stdlib.h> #include <string.h> void Trim(char *s); /*-------------------------------------------------*/ int main() { char bstr[]=" This is a pen "; printf("***%s***\n",bstr); Trim(bstr); printf("***%s***\n",bstr); return 0; } /*-------------------------------------------------*/ void Trim(char *s) { int i; /*末尾から空白でない位置を捜し終端文字を付加*/ /*strlenは終端文字は数えない*/ /*配列s[]の添字の範囲は0からstrlen(s)-1*/ for(i=strlen(s)-1;i>=0;i--){ if(s[i]!=' ')break; } s[i+1]='\0'; /*先頭から空白でない位置を捜しその位置以降をstrcpy*/ for(i=0;i<=strlen(s);i++){ if(s[i]!=' ')break; } strcpy(s,&s[i]); } /*-------------------------------------------------*/ |
このサイトで使っている背景色の一覧表を作ってみました.CSS は本文で用いているものを読み込み,表に着色する部分を付け加えています.
ファイル名 | 概要 |
---|---|
test-color.css | css ファイル |
test-color.html | html 文書 |
CSS による縦並び・横並びリンクの事例.これは「詳説 HTMLタグ辞典」(秀和システム:2008.02.24)p228-229 記載の事例を応用したものです.
ファイル名 | 概要 |
---|---|
test-menu.css | css ファイル |
test-menu.html | html 文書 |
CSS のみによる角丸ボックス表示の事例です.添付 html 文書の左メニュー下に表示しています.これは「詳説 HTMLタグ辞典」(秀和システム:2008.02.24)p258-259 記載の事例を実行したものです.
ファイル名 | 概要 |
---|---|
test-rbox.css | css ファイル |
test-rbox.html | html 文書 |
Opera で pdf を見る場合,表示はしてくれるが元に戻る時強制終了してしまうなどの問題がありました. これに対処するには,以下の手順で ok のようです.
Opera を開く --> [ツール] --> [設定] --> [詳細設定] --> [ダウンロード] --> 「Opera で開くファイルタイプを表示しない」のチェックをはずす --> 「拡張子 pdf」の選択 --> [編集] --> 「標準のアプリケーションで開く」を選択 --> [OK]
上記設定により,Web ページで pdf を選択すると,Opera の外に Adobe Reader が立ち上がりpdfを表示してくれます.当然 Adobe Reader がインストールされていることが条件です.
XP 用メイリオフォントのありかは「http://www.microsoft.com/downloads/details.aspx?FamilyID=f7d758d2-46ff-4c55-92f2-69ae834ac928&DisplayLang=ja」
XP では,せっかくメイリオフォントを入れても,FireFox などで,周囲がギザギザになりきれいに表示できない場合があります. この場合,
[コントロールパネル] --> [画面] --> [デザイン] --> [効果] --> [次の方法でスクリーンフォントの縁を滑らかにする] --> Clear Type を選定
とすることにより,うまく表示ができるようになります.
リンク先 | 概要 |
---|---|
W3C Markup Validation Service | W3C のチェッカー.英語版です |
Another HTML-lint gateway | きめ細かなチェックを行ってくれる.100 点満点の点数評価.日本のサイトです |
WDG HTML Validator | Validate entire site のオプション指定により,サイト全体をチェックしてくれる.英語版です |
WANtaro が使っているレイアウトを作るための CSS と html 文書の基本部分です.解説書やインターネットで調べて試行してみましたが,右側のみ可変幅とするとなかなかうまく行かず,試行錯誤で現在はこれに落ち着いています.
この方法では,下の失敗事例に示すように,左側の行数が右側より大きくなると突き抜けてしまうという短所があります.
css 中の「後フッター」という部分は,このページの最後へのリンクボタンを,右端につけるために設けた「帯」です.
css 中の「前フッター」という部分は,Top page へのリンクボタンを,左端につけるために設けた「帯」です.
ファイル名 | 概要 |
---|---|
test-css.css | css ファイル |
test-css.html | html 文書(成功事例) |
test-css-bad.html | html 文書(失敗事例) |
インターネットで調べて,「このページ」を参考に,本ページ左下のような Top page へのリンクボタンを作りました.下のコマンドは,"index.html"というページの"header"という id がつけられた場所にリンク(ジャンプ)するものです.
<form action="index.html#header"><p><input type="submit" value=" ▲Top page "></p></form> |
http://www.homw.nw.jp/cs/tool/index_a.html
↑ここから「ブロードバンド最適化ツール」をダウンロード・保存すると保存したフォルダに「BBtuner.exe」という実行ファイルが作成されます.
これを実行し,画面で「RWIN」の値を変更します.RWINの選択肢は以下の通り.
RWIN | 179200 | 256960 | 338720 | 473600 |
---|
最適な値は試行錯誤で探すしかないようです.値を大きくしてもスピードが極端に落ちる場合もあるため注意! またRWIN以外の箇所は変更しないことにも注意です!