第5章計算の方法

起動法と使い方

教育用計算機システムのターミナルで jupyter-notebook /home/5320954122/notebook/joho18.ipynb と入力すると、ブラウザ上で実行できるようになる。

プログラムを実行するには、In [番号] と出ている行で、キーボードから[Shift]+[Return]を押す。

5.1.2

python3 というプログラミング言語を使って、記述する。 関係する記法としては、

  • 代入は「←」の代わりに「=」
  • 配列は添字にする代わりに「[」と「]」で囲む
  • whileでdoの代わりに「:」を書く。doneは書かず、代わりに、行頭を字下げして範囲を表す
  • 関数定義はdefを使う
  • 四則演算は 「+」, 「-」, 「*」, 「/」を使う。べき乗には「**」を使う
  • printで表示する。 などがあるが、実例をみていく

八十八夜問題を解く。

「<残り日数>」の変数名はd とする。

In [9]:
daymonth = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
d = 4 + 87
m = 2
while d > daymonth[m]:
    d = d - daymonth[m]
    m = m + 1
print('答えは %s%s 日' % (m, d))
答えは 5 月 2 日

反復による平方根の計算

In [6]:
def square1(x, delta):
    y = 0
    while (y + delta)**2 < x:
        y = y + delta
    return y
print(square1(2, 0.0001))
1.4141999999998607

deltaの値を変化させながら時間を計測するには、実行する行のはじめに「%time 」をつける。

In [8]:
%time square1(2, 0.0001)
%time square1(2, 0.00001)
%time square1(2, 0.000001)
%time square1(2, 0.0000001)
CPU times: user 2.15 ms, sys: 10 µs, total: 2.16 ms
Wall time: 2.17 ms
CPU times: user 21.7 ms, sys: 1.4 ms, total: 23.1 ms
Wall time: 22 ms
CPU times: user 203 ms, sys: 1.42 ms, total: 205 ms
Wall time: 204 ms
CPU times: user 2.04 s, sys: 2.42 ms, total: 2.04 s
Wall time: 2.04 s
Out[8]:
1.4142134999920155

次にアルゴリズム2「二分法による平方根の計算」を試してみる。

In [10]:
def square2(x, delta):
    a = 0
    b = x
    while b - a > delta:
        c = (a + b) / 2
        if c ** 2 > x:
            b = c
        else:
            a = c
    return a
print(square2(2, 0.0001))
1.4141845703125

また、deltaの値を変えながら試してみる。今度はms (1000分の1秒)ではなくµs(100万分の1秒)の単位の計測結果になる。

In [11]:
%time square2(2, 0.0001)
%time square2(2, 0.00001)
%time square2(2, 0.000001)
%time square2(2, 0.0000001)
CPU times: user 10 µs, sys: 1 µs, total: 11 µs
Wall time: 15.3 µs
CPU times: user 11 µs, sys: 1 µs, total: 12 µs
Wall time: 16.2 µs
CPU times: user 11 µs, sys: 1e+03 ns, total: 12 µs
Wall time: 16 µs
CPU times: user 12 µs, sys: 1e+03 ns, total: 13 µs
Wall time: 16.9 µs
Out[11]:
1.4142135381698608
In [ ]: