jippiniusの自然科学研究

ジッピニウスの自然科学や技術関連についての備忘録です。

実効再生産数の簡易計算法:bcを使ってみる

実効再生産数の概算(速報値の処理)

東京都の福祉保健局は毎日午後3時になると速報を発表する。この発表には新規感染者数が含まれているので、この発表内容を受け取った各メディアは一斉に報道する。

新規感染者数がとても大切な時期もあるが、今はむしろ「下げ止まるかどうか」に興味があるので、実効再生産数などの数字に興味を持つ人が多いだろう。福祉保健局の発表には実効再生産数は含まれていないが、今週/前週の感染者数の比率(増加率)が平均値を用いて公開されているので、この数字を使うと大雑把に「実効再生産数(R')」を計算することができる。公式は $$\text{実効再生産数}\simeq\left(\frac{A_7}{B_7}\right)^{5/7}=(\text{対前週比})^{5/7}$$ となる。ただし、$A_7=$直近7日間の移動平均, (B_7=)先週7日間の移動平均である。

速報には「対前週比」が書かれていて、例えば(今さっき発表された)3月4日の場合は96.2%であった。したがって、(0.962^{5/7})という計算がパッとできると、実効再生産数の目安として利用することができるから重宝である。冪乗の計算ができる関数電卓を使って計算するとR’=0.9727...となった。

この公式を使って計算するとき、5/7乗の部分が面倒である。たとえば、あらかじめ$$\frac{5}{7}=0.714285....$$を計算し紙にメモし、次に0.962と打ち込んだ後、(XY)キーを押し、メモっておいた0.714285...を打ち込み、最後に「=」キーを押す....というのが「普通の人」のやり方だろう。ここで、「普通の人」というのは、メモリーキーの使い方を知らない人、という定義を意味する。

電卓のメモリーキーの使い方(実機CASIO SL-310Aで勉強)

電卓にメモリーキーがあるのは知っているが、いつも使い方を忘れてしまう。経理をやっている人や、会計士の方は日頃から使い慣れているかもしれない(エクセルなどを使っている会社ではダメかもしれないが)が、普通の人の中で、「メモリーキー」を使いこなしている人はごく少数派ではないだろうか?(もちろん、我輩もメモリーキーは使えない。)そこで、今回調べてみることにした。

まずは手元にある実機CASIO SL-310Aで練習してみようと思う。この電卓はあちこちで見かける。ATMのサービスとして貼り付けてある銀行もあるし、スーパーのレジ待ちのところにぶら下げて売っているところもあるだろう。

今回参考にしたのは、こちらのHPである。ググって一番上に出たので、みてみただけである。

まず利用頻度が高そうなのは「MR」キーと「M+」キーだろう。とりあえず、1+2を計算してみよう。1,+,2,=と押すと液晶表示部に「3」とだけ表示される(当然である)。

この段階でメモリーには0が入っているので、MRキーを押すと液晶表示は0に変わるだろう。ただし、0に変わると、「3」という先ほどの計算結果が消えて無くなってしまう。ここで確認できたのは、メモリーにデフォルトで入る数字は0であるということである。この認識がもっとも重要だと思われる。

では、先ほどの「3」という結果をメモリに残したいときはどうするかというと、3という結果が出た後、「M+」キーを押すのである。このキーの機能はコンピュータプログラム風に解釈すると

    MR = MR + N,  あるいは MR += N

である(プログラミングに慣れていない人向きに書くと, MR + N → MRとなる)。ただし、N=液晶に表示された数字、MR=メモリにストア(保存)された数字、である。デフォルトの場合, MR=0であるから、M+を押すと、メモリーに表示されている数字が記憶されるのである。

では、M-を押すとどうなるかというと、このボタンの機能は 「MR -= N」であるから、メモリーに「-3」がストアされるのである。

さっそく確かめてみよう。

1. 「1,+,2,=」と順番に押す。
2. 「3」と表示される。
3. M-を押すと、左上にMと小さい文字が出た上に、メインの液晶表示部に「3」と表示される。
4. ACキー軽く1回押すと、表示は消えて「0」となるが、左上の小さなMという文字はついたままになっている。これはメモリーにストアされていますよ、という意味である。
5. どんな数字がメモリにストアされているかMRキーを押して確認してみる。押すとちゃんと「−3」と表示されるはずである。
6. ACキーを押して再び表示を0にしても、メモリーには-3が入ったままになっている。
7. ACキーに続けて「1,+,2,=」と入力すると「3」という表示が液晶に出る。
8. この結果を先ほどの「-3」と足し合わせたい場合はM+、引き算したい場合はM-を押す。
9. M+と押した場合は、0=-3+3となる(が、なぜかメモリに保存されていることを示す小さなMの字は消えてしまうが、結果は正しい)。どうも、0という数字は記憶する必要がないらしい。
10. Mーと押した場合は、-6=-3-3となるはずで、実際MRキーを押して確認してみると、-6に表示が変わるのが確認できる。

M-を2回使い、メモリーに「ー6」がストアされる場合の入力は具体的には次のようになる。
        1,+,2,=,M-,AC,1,+,2,=,M-
液晶表示には「3」(および左端に小さなMの字)と出るが、MRキーを押すと「−6」となるはずである。

このようにしてメモリを利用すると、多段階の計算が実行できる(紙にメモらなくて良い)。例えば、

    1,+,2,=,M-,AC,2,+,3,=,M+,MR

と押してみると、2と表示される。これは$$ 0-(1+2)+(2+3) = 0-3+5=2$$の結果が表示されているのである。

メモリの内容を消去するにはMCキーを押せばよい。

CASIO SL-310Aを用いた消費税の計算

ちなみに、CASIO SL-310Aの場合、消費税の設定もできる。まずは%キーと税込キーを同時に押して(長押し気味に押す)、税率を設定する。たとえば、カリフォルニアの消費税の最大値8.75%を設定してみる。2つのキーを同時に長押しすると、液晶に「M 税 %」という3つの小さな文字が現れる。次に8.25と入力した後、再び%キーと税込キーの2つを同時に押す。これで税率の登録完了である。

100と入力した後、税込キーを押すと、画面には「108.25」と出ると思う。つまり、100ドルのSDカードを買ったとすると、税込で108ドル25セントになるということである。

今度は100と入力した後、税抜きキーを押すと、92.3787529と表示されるだろう。これは支払額を100ドルにするには、本体価格を92ドル38セントにしておきばよいということである(92ドル37セントと切り捨てる店主は良心的である)。

日本の場合、現在消費税は10%になってしまったから、難しい計算は必要なくなってしまった(でも食品や新聞購読はまだ8%だから、この電卓は必要かもしれない)。

OS付属の計算機への応用

macOSに付属の「計算機(Calculator)」を使ってみよう。

f:id:jippinius:20210304165154p:plain macOSの計算機

基本的な使い方はCASIOと同じだが、やはりメモリ機能というのは「万人が使う常識」となっていないため、その実装に関しては「方言」がたくさん存在するようである。たとえば、このmacOSの計算機の場合は、CやACで表示を消しても、メモリ内にストアされた数字は残り続けるようである。したがって、新しい計算を始める場合にはMCをしっかり押して「ねがいましては」とやらねばならない。

この点だけ気をつけておけば、あとはCASIOと同じようにできる。

では、本日のデータ対前週比=0.962に対して、実効再生産数を「関数電卓」で計算してみよう。

  1. . まずはMCを押してメモリをクリアしておく。
    1. 次に、5/7乗を計算するために、「5,/,7,=」と押す。
    2. この結果をメモリにストアするために、「M+」を押す。
    3. 次にCを押して表示をクリアし、0.962と打ち込む。
    4. そして(XY)キーを押す。
    5. 最後に、MRキーを押して5/7の結果を呼び出し、=キーを押す。
    6. 答えの0.97270...が表示される。

これで完了である!(つまり、今日発表された結果を用いると、R'=0.97...となり、下げ止まりが確認できたのである....)

bcを用いた計算

UNIXにはこういう単純計算をプログラミングできるコマンドbcがある。bcというのは"Basic Calculator"の省略である。

関数が定義でき、ファイルに保存が効くから、一度コードを書いておくと便利である。さっそく使ってみよう。

まずはbcとタイプすると

    bc 1.06
    Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
    This is free software with ABSOLUTELY NO WARRANTY.
    For details type `warranty'.

このようなメッセージが現れる。最初の1回目は見る気がするのだが、計算の度に見るのはきつい。そこでこのメッセージを消すフラグが-qである。

bcから抜けるには"quit"とタイプする。

また、数学関数として対数や指数が使えるようになっている。今回のコードでは両方使うので、数学ライブラリを呼び込むフラグ-lもつける。つまり

    bc -ql ファイル名(計算手順を書いたコード)

タイプする。

さて、今回のコードでは(0.9625/7)のような計算をさせたいのだが、bcには任意のべき乗計算をする数学関数は用意されていない。そこで、次の関係を利用する。[ab = \exp(b\log_e a)] bcの場合対数は(l(x))、指数関数は(e(x))で定義されている。

したがって、実効再生産数を計算するコードは次のようになる。

 ------- effR.bc --------

    scale=3
    nweek=0.962
    
    define effr(x){
        exp0 = l(x) * (5.0/7)
        return e(exp0)
    }
    print effr(nweek)
    print "\n"
    quit

このファイルを保存して、bc -ql effR.bcとタイプすると、0.973という答えが出てくる。

このままだと、nweekの値を変更するとき、いつもファイルを書き換える必要が出てきてしまう。そこで、nweek=0.962の部分を消去し、print effrの引数をNWと書き換える(すなわちprint effr(NW)とする)。そして、次のようにして実行する。

sed 's/NW/0.962/g' effR.bc|bc -ql

こうすると0.962の部分を変更したいとき、例えば0.823の場合sed's/NW/0.823/g'|bc -qlとやると新しい入力に対しての計算結果が出てくるようになる。

ちなみに、bcのコードでは、どうやら大文字が使えないようだ(使うとエラーになる)。気をつけたい。

bcのポテンシャルは高いと思われるので、これからも少しずつ研究していこうと思っている。