ネットで見つけたニュートン算の問題をPythonで解いてみました。(^_^;
もし12頭の牛が(3と三分の1)エーカーの牧草を4週間で食べ尽くし、21頭の牛が10エーカーの牧草を9週間で食べ尽くすとすると、何頭の牛が24エーカーの牧草を18週間で食べ尽くすか。
この問題を一般化すると、次のようになります。
頭の牛は 個の牧場の牧草を 日で食べつくす。
頭の牛は 個の牧場の牧草を 日で食べつくす。
頭の牛は 個の牧場の牧草を 日で食べつくす。
このとき、 の間の関係はどうなるか。ただし、各牧場の牧草の量は等しく、また、それぞれの牧場の牧草の 1 日の生長量は一定で、それぞれの牛が 1 日に食べる量も一定であるものとする。
3番目の参考URLから次式を得ます。ただし、変数は上記に従いました。また、分数が含まれますが、変数がダブらないので公式としてはこの方が憶えやすくていいかなと思います。分数を含まない形が欲しいときは必要に応じて変形すればいいでしょう。(^_^;
このニュートン算の公式を用いて解くと、求める牛をx[頭]として、次の方程式を得ます。
この行列式の方程式をPythonのNumpyとScipyを使って解くと以下のような結果を得ました。(^_^;
● NewtonProb1.py
# coding: UTF-8 # NewtonProb1.py import numpy as np from scipy.optimize import newton def f(x): a1,b1,c1 = 12.0, 3.0+1.0/3.0, 4.0 a2,b2,c2 = 21.0, 10.0, 9.0 a3,b3,c3 = x, 24.0, 18.0 a = np.array([[a1/b1,1/c1,1], [a2/b2,1/c2,1], [a3/b3,1/c3,1]]) return np.linalg.det(a) def main(): print(newton(f,1.0)) if __name__ == '__main__': main()
●実行結果
36.0
ちなみに、数的推理などに出てくるニュートン算の場合、とみなせる場合が多いので、ニュートン算の公式は次式のように簡単になります。
※参考URL
●「ニュートン算が解けない」|メタメタの日
●ニュートン算 出典
●『100 Great Problems of Elementary Mathematics』第3話
●numpy.linalg.det − NumPy v1.8 Manual
●scipy.optimize.newton − SciPy v0.16.1 Reference Guide
●非線形方程式を解く − 読書ノート v1.4.0dev - プレハブ小屋
●つまみぐいプログラミング Python で方程式を数値的に解く
100 Great Problems of Elementary Mathematics (Dover Books on Mathematics)
- 作者: Heinrich Doerrie
- 出版社/メーカー: Dover Publications
- 発売日: 1965/06/01
- メディア: ペーパーバック
- この商品を含むブログ (1件) を見る