気候システム論
ふろおけモデルの簡単な例、表計算ソフトウェアによる計算シート例
[ふろおけモデル]のページで述べたモデルの
簡単な場合(流入量が一定値、流出量が水位に比例する場合)について、
差分法による近似計算の考えかたとR言語によるプログラム例を
[ふろおけモデルの簡単な例、そのRによる計算プログラム]のページに示した。
このような計算は、表計算ソフトウェアですることもできる。
その場合、表計算のシートのセルに計算式を入れる形をとる。
さらに、差分計算のプログラムを表計算で表現する際には、
同じ計算式をいっせいにコピーすることになるが、
コピーの際に、式の中で参照されているセル位置が変わらない「絶対参照」と、
式が置かれた位置との位置関係によって変わる「相対参照」を使いわける。
「簡単な例」のページでR言語の例を示したのと同じ計算をする表計算シートを
OpenOffice Calcで作成してみた。
ここに示した限りでは、同じ形で、LibreOfficeでも、Microsoft Excelでも動くと思うが、
まだ確認していない。
理論値(解析解)の計算(R言語プログラム例では(3x)および(5)の部分)は
まだ用意していない。今後の改訂で追加するかもしれない。
- 下には、計算式を入れるところには、計算式または「↓」印を入れた形で示した。
実際に表をつくって表示させると、計算結果の数値が見える。
- 下の説明表で「↓」は (ワークシートにこのとおりに矢印を入れるのではなく)、
真上にある「↓」以外のはいったセルの内容を複写することを意味する。
- ここで「複写」と表現した操作はむしろ「コピー」と言うのがふつうだと思うが、
実際のソフトウェアでは「コピー」と「ペースト(貼りつけ)」の組み合わせで実現されているので
まぎらわしさを避けて別の語で示した。
- 複写した際に、式の中の「$」印つきの「$B$11」のようなセル参照は「絶対セル参照」で、変わらないが、
「$」のない「F2」のようなものは「相対セル参照」で、対象がずれていく。
「$D2」は、列「D」については絶対参照、行「2」については相対参照である。
複写すると、Dは変わらず、2は複写元と複写先の位置の差だけずれた参照に変わる。
(絶対セル参照、相対セル参照が、それぞれ、R言語では、
配列でない変数への参照、配列の要素への参照に対応することに注意して、
R言語による例の説明を応用してほしい。)
- 実際の表作成手順としては、
まず3行めを、「↓」がはいっているところには2行めの内容を複写し、
計算式がはいっているところはそれを記入して、完成させたあと、
D3:H3の内容をまとめてD4:H22にコピーするのがよいだろう。
- D2:H22の範囲が実質的な計算をするための表として使われている。
(D1:H1に各列の変数の説明がある。)
- A・B列の4行めまでの内容は、この表が何であるかの覚え書きであって、実質的計算には使わない。
- A・B列の6行めから下はモデルのパラメータや計算実行上のパラメータを置く場所とした。
A列に変数名、B列に値または計算式がある。
- A..B列と、D..H列とは、便宜上同じワークシート内にあるが、
ユーザー側の理屈では別々の表で、同じ行どうしの内容の関連はない。
| A | B | C | D | E | F | G | H |
1 | Bath-tub model | | | k | time (s) | stock (kg) | inflow (kg/s) | outflow (kg/s) |
2 | 2015-06-10 | | | 1 | =($D2-1)*$B$11 | =$B$14 | =$B$6 | =$B$9*F2 |
3 | MASUDA Kooiti | | | =$D2+1 | ↓ | =F2+(G2-H2)*$B$11 | ↓ | ↓ |
4 | | | | ↓ | ↓ | ↓ | ↓ | ↓ |
... | | | | ↓ | ↓ | ↓ | ↓ | ↓ |
6 | inflowc (kg/s) | =10/60 | | ↓ | ↓ | ↓ | ↓ | ↓ |
7 | stockstd (kg) | 50 | | ↓ | ↓ | ↓ | ↓ | ↓ |
8 | outcoefstd (1/s) | =$B$6/$B$7 | | ↓ | ↓ | ↓ | ↓ | ↓ |
9 | outcoef (1/s) | =$B$8 | | ↓ | ↓ | ↓ | ↓ | ↓ |
... | | | | ↓ | ↓ | ↓ | ↓ | ↓ |
11 | deltat (s) | 60 | | ↓ | ↓ | ↓ | ↓ | ↓ |
12 | nstep | 20 | | ↓ | ↓ | ↓ | ↓ | ↓ |
... | | | | ↓ | ↓ | ↓ | ↓ | ↓ |
14 | stockinit (kg) | 30 | | ↓ | ↓ | ↓ | ↓ | ↓ |
... | | | | ↓ | ↓ | ↓ | ↓ | ↓ |
22 | | | | ↓ | ↓ | ↓ | ↓ | ↓ |
そのまま実行するほかに、次のような変更をして結果を比較してみてほしい。
- 流入量を与えるセル B6 の内容を変える。たとえば、2倍(=20/60)にしたり、半分(=5/60)にしたり、0にしたりする。
- 流出量の係数を与えるセル B9 の内容を変える。たとえば、2倍 (=2*$B$8)にしたり、半分 (0.5*$B$8)にしたりする。
- ストック量の初期値を与えるセル B14 の値(例では30)を変える。
- シミュレーションの時間ステップ数をふやす。
これには、D列からH列までの22行めの内容(計算式)を23行めから下の各行に複写していけばよい。
セル B12 の内容は、モデル実行のパラメータとしての総ステップ数を与えるものだが、
これは今のところ実質的計算では使っていない。
ひとつのワークシート上で、複数のパラメータセットによるシミュレーションを実行することもできる。
その際のプログラムの変更点は(総ステップ数を変えない限りで述べると)次のとおり。
- 変更されたパラメータを置く場所を、すでに使っていないところのうちで、適当に決める。
例として、それぞれのパラメータの変更後の値が1種類だけだとして、
パラメータ値を置いたB列のセルの隣のC列のセルを使うことにする。
変更後の値を2種類以上扱う場合は、さらにくふうが必要。
- たとえば、C列とD列の間に列をふやす (「D2」が参照されているところの修正が必要になる)。
- あるいは、A・B列の6..15行めを複写して、16..25行め、26..35行め ... に
各シミュレーションのパラメータセットを置く。
- E..H列の1..2行めの内容(計算結果でなく計算式)を新しい4列(たとえばI..L列、M..P列)に複写する。
- 複写先の2行めおよび3行めの中の「$B$6, $B$9, $B$11, $B$14」のうちでパラメータ値を変更したところを、
変更後のパラメータ値を置いたセルへの絶対参照
(例としてパラメータ値をC列に置いた場合は、$C$6など)に変更する。
- 新しい列(例ではI..L列、M..P列)の2行めの内容のうちtime, Fin, Foutに関するところの内容(計算結果でなく計算式)を3行めに複写し、
3行めの内容をまとめて4..22行めに複写する。
2015-06-07; 更新 2015-06-10 (授業後)
増田 耕一 (MASUDA Kooiti)