ST_FUNC開発日記

建築構造設計Excelアドイン開発の記録

単位についての考え方

今作ってきたsecBuildH関数は、単位がmm関係しか出てこなかったので、話題にしてこなかったが、単位をどうするかという問題がある。

構造設計は荷重や鉄骨量との戦いなので、断面性能関数には当然単位質量を出力したくなる。

単位質量は単位は通常kg/mを使う。一方で、入力の寸法はmmとなる。長さの単位が複数出てくるため、どこかで単位変換のような作業が必要になってくる。

しかし、プログラムを組むにあたって、計算過程でいちいち単位を変換するのは非常に面倒である。

例えば梁の固有周期を求めるための連続体の振動数の計算式とかで

\sqrt{\frac{EI}{m}}\left(\frac{\pi}{L}\right)^2

なんてのが出てくると単位は

\sqrt{\frac{\mathrm{N/mm^2}\cdot\mathrm{mm^4}}{\mathrm{kg/m}}}\left(\frac{無次元}{\mathrm{m}}\right)^2

みたいな感じになって、でも実はN(ニュートン)は質量かける加速度だから、実は単位の中にm(メートル)が入っているので、実際は

\sqrt{\frac{\mathrm{(kg\cdot m/s^2)/mm^2}\cdot\mathrm{mm^4}}{\mathrm{kg/m}}}\left(\frac{無次元}{\mathrm{m}}\right)^2

みたいなことになってくる。こんな状態で、それぞれの値でいちいち単位変換をするとプログラムのコードがわけが分からなくなってしまうので、

計算を実施するライブラリ内では、単位の変換が必要ない体系としたい。

ということで、st-func-ts内の計算式は全て「一貫性のあるSI単位」を用いることする。

一貫性のあるSI単位については↓

国際単位系 - Wikipedia

しかし、Excelのワークシート関数で、一貫性のあるSI単位にしてしまうと、板厚を0.012mとかで入力することになり扱いにくい。

エクセルでは人が使いやすい単位のほうが良いため、Excelアドインのほうで、入出力の際に使っている単位と一貫性のあるSI単位へ変換する仕組みとする。

一つ懸念点は、桁落ちの問題である。

プログラムで処理する実数は2進数であり、0.1が循環小数になる。

そのため、例えば、1mmをプログラム演算時は/1000して0.001mにし、再度*1000して1mmになおすと、0.999999999みたいな数値になってしまう場合がある。

基本的に長さの単位はmmを使うのでやや気になるところではあるが、先ほどの話の通り、力で基本的に用いるN(ニュートン)はmが入っているため、mmを使って一貫性のある単位系にするのは難しい。

少し数値がずれるとはいえ、10^-15とかのオーダーであるため、多少の桁落ちには目をつむり、内部計算はm、kg、sを基本とした単位で計算することとする。