10.3 別解4
2016-12-30 10.3からMaximaによる解法をこのファイル(10.3 別解4)に移動した。
解法
4月末、7月末、9月末、12月末の先渡価格の理論値と実値との差の二乗の和を 関数 g(s, r)で表す。ただし、s は4月初めの現物価格(spot price)、r は金利である。
関数 g の全ての偏微分が 0 となる s と r を次の連立方程式を解いて、金利 r を推定する。
∂g/∂s = 0 ∂g/∂r = 0
Maxima による解
Maximaによって、関数 g を作成し、偏微分 ∂g/∂s、∂g/∂r を求め、連立方程式 ∂g/∂s = 0、∂g/∂r = 0 を解き、金利 r を推定する。
Maximaにより得られた解を次に示す。これらの値は、Pythonで数値計算した値と上から 6 桁まで一致した。
s = 403.14354 r = 0.05002238
Maximaで解く様子を下に示す。関数g(s, r)の詳細は、下方に示す。
注
%i1 月当たり保有費用を c に代入
%i2~%i5 4月~9月の先渡価格(実値)を fapr~fdec に代入
%i6~%i9 4月~9月の先渡価格(理論式)を f4~f12 に代入
%i10 4月末、7月末、9月末、12月末の先渡価格の理論値と実値との差の二乗の和を g に代入
%i11 g を s で偏微分して得た偏導関数を dgds に代入
%i12 g を r で偏微分して得た偏導関数を dgdr に代入
%i13 連立方程式(dgds = 0, dgdr = 0)を s, r について解いた解を A に代入
%i14 解の内問題に適合する解を表示
Maxima 5.38.1 http://maxima.sourceforge.net using Lisp SBCL 1.3.4 Distributed under the GNU Public License. See the file COPYING. Dedicated to the memory of William Schelter. The function bug_report() provides bug reporting information. (%i1) c : 20/12; 5 (%o1) - 3 (%i2) fapr : 406.50; (%o2) 406.5 (%i3) fjul : 416.64; (%o3) 416.64 (%i4) fsep : 423.48; (%o4) 423.48 (%i5) fdec : 433.84; (%o5) 433.84 (%i6) f4 : s*(1+r/12) + c* (1+r/12); r 5 (-- + 1) r 12 (%o6) (-- + 1) s + ---------- 12 3 (%i7) f7 : s*(1+r/12)^4 + c*((1+r/12)^4+(1+r/12)^3+(1+r/12)^2+(1+r/12)); r r 4 r 3 r 2 5 (-- + (-- + 1) + (-- + 1) + (-- + 1) + 1) r 4 12 12 12 12 (%o7) (-- + 1) s + ---------------------------------------------- 12 3 (%i8) f9 : s*(1+r/12)^6 + c*((1+r/12)^6+(1+r/12)^5+(1+r/12)^4+(1+r/12)^3+(1+r/12)^2+(1+r/12)); r 6 (%o8) (-- + 1) s 12 r r 6 r 5 r 4 r 3 r 2 5 (-- + (-- + 1) + (-- + 1) + (-- + 1) + (-- + 1) + (-- + 1) + 1) 12 12 12 12 12 12 + ---------------------------------------------------------------------- 3 (%i9) f12 : s*(1+r/12)^9 + c*((1+r/12)^9+(1+r/12)^8+(1+r/12)^7+(1+r/12)^6+(1+r/12)^5+(1+r/12)^4+(1+r/12)^3+(1+r/12)^2+(1+r/12)); r 9 r r 9 r 8 r 7 r 6 (%o9) (-- + 1) s + (5 (-- + (-- + 1) + (-- + 1) + (-- + 1) + (-- + 1) 12 12 12 12 12 12 r 5 r 4 r 3 r 2 + (-- + 1) + (-- + 1) + (-- + 1) + (-- + 1) + 1))/3 12 12 12 12 (%i10) g : (f4-fapr)^2 + (f7 - fjul)^2 + (f9 - fsep)^2 + (f12 - fdec)^2; r 5 (-- + 1) r 12 2 (%o10) ((-- + 1) s + ---------- - 406.5) 12 3 r 9 r r 9 r 8 r 7 r 6 + expt((-- + 1) s + (5 (-- + (-- + 1) + (-- + 1) + (-- + 1) + (-- + 1) 12 12 12 12 12 12 r 5 r 4 r 3 r 2 + (-- + 1) + (-- + 1) + (-- + 1) + (-- + 1) + 1))/3 - 433.84, 2) 12 12 12 12 r 6 + expt((-- + 1) s 12 r r 6 r 5 r 4 r 3 r 2 5 (-- + (-- + 1) + (-- + 1) + (-- + 1) + (-- + 1) + (-- + 1) + 1) 12 12 12 12 12 12 + ---------------------------------------------------------------------- 3 - 423.48, 2) r r 4 r 3 r 2 5 (-- + (-- + 1) + (-- + 1) + (-- + 1) + 1) r 4 12 12 12 12 2 + ((-- + 1) s + ---------------------------------------------- - 416.64) 12 3 (%i11) dgds : diff(g, s); r 5 (-- + 1) r r 12 (%o11) 2 (-- + 1) ((-- + 1) s + ---------- - 406.5) 12 12 3 r 9 r 9 r r 9 r 8 r 7 + 2 (-- + 1) ((-- + 1) s + (5 (-- + (-- + 1) + (-- + 1) + (-- + 1) 12 12 12 12 12 12 r 6 r 5 r 4 r 3 r 2 + (-- + 1) + (-- + 1) + (-- + 1) + (-- + 1) + (-- + 1) + 1))/3 - 433.84) 12 12 12 12 12 r 6 r 6 + 2 (-- + 1) ((-- + 1) s 12 12 r r 6 r 5 r 4 r 3 r 2 5 (-- + (-- + 1) + (-- + 1) + (-- + 1) + (-- + 1) + (-- + 1) + 1) 12 12 12 12 12 12 + ---------------------------------------------------------------------- 3 r 4 r 4 - 423.48) + 2 (-- + 1) ((-- + 1) s 12 12 r r 4 r 3 r 2 5 (-- + (-- + 1) + (-- + 1) + (-- + 1) + 1) 12 12 12 12 + ---------------------------------------------- - 416.64) 3 (%i12) dgdr : diff(g, r); r 5 (-- + 1) s 5 r 12 (%o12) 2 (-- + --) ((-- + 1) s + ---------- - 406.5) 12 36 12 3 r 8 r r 8 r 7 r 6 3 (-- + 1) s -- + 1 3 (-- + 1) 2 (-- + 1) 7 (-- + 1) 12 12 12 12 12 + 2 (------------- + (5 (------ + ----------- + ----------- + ----------- 4 6 4 3 12 r 5 r 4 r 3 r 2 (-- + 1) 5 (-- + 1) (-- + 1) (-- + 1) 12 12 12 12 1 + --------- + ----------- + --------- + --------- + --))/3) 2 12 3 4 12 r 9 r r 9 r 8 r 7 r 6 ((-- + 1) s + (5 (-- + (-- + 1) + (-- + 1) + (-- + 1) + (-- + 1) 12 12 12 12 12 12 r 5 r 4 r 3 r 2 + (-- + 1) + (-- + 1) + (-- + 1) + (-- + 1) + 1))/3 - 433.84) 12 12 12 12 r 5 (-- + 1) s 12 + 2 (----------- 2 r r 5 r 4 r 3 r 2 -- + 1 (-- + 1) 5 (-- + 1) (-- + 1) (-- + 1) 12 12 12 12 12 1 5 (------ + --------- + ----------- + --------- + --------- + --) 6 2 12 3 4 12 + -----------------------------------------------------------------) 3 r 6 ((-- + 1) s 12 r r 6 r 5 r 4 r 3 r 2 5 (-- + (-- + 1) + (-- + 1) + (-- + 1) + (-- + 1) + (-- + 1) + 1) 12 12 12 12 12 12 + ---------------------------------------------------------------------- 3 r r 3 r 2 -- + 1 (-- + 1) (-- + 1) r 3 12 12 12 1 (-- + 1) s 5 (------ + --------- + --------- + --) 12 6 3 4 12 - 423.48) + 2 (----------- + ---------------------------------------) 3 3 r r 4 r 3 r 2 5 (-- + (-- + 1) + (-- + 1) + (-- + 1) + 1) r 4 12 12 12 12 ((-- + 1) s + ---------------------------------------------- - 416.64) 12 3 (%i13) A : solve([dgds, dgdr], [s, r]); rat: replaced -416.64 by -10416/25 = -416.64 rat: replaced -423.48 by -10587/25 = -423.48 rat: replaced -433.84 by -10846/25 = -433.84 rat: replaced -406.5 by -813/2 = -406.5 rat: replaced -416.64 by -10416/25 = -416.64 rat: replaced -423.48 by -10587/25 = -423.48 rat: replaced -433.84 by -10846/25 = -433.84 rat: replaced -406.5 by -813/2 = -406.5 (%o13) [[s = 403.1435406698565, r = 0.05002238137869293], [s = 807.1365108566245 %i + 765.2155263131301, r = 5.482484562942228 %i - 1.292738116006992], [s = 765.2155263131268 - 807.1365108566232 %i, r = (- 5.482484562942228 %i) - 1.292738116006992], [s = 5.681322911128709 %i - 0.7414783485285021, r = 6.984943202251562 %i - 2.383900263013933], [s = (- 5.681322911128701 %i) - 0.7414783485285148, r = (- 6.984943202251562 %i) - 2.383900263013933], [s = 175.3827385546801 - 128.8211716962691 %i, r = 8.22354013212522 %i - 5.022547188270437], [s = 128.8211716962779 %i + 175.3827385546836, r = (- 8.22354013212522 %i) - 5.022547188270437], [s = (- 79.07136649847534 %i) - 24.0646754172521, r = 10.25660315442401 %i - 3.504519238155968], [s = 79.0713664984753 %i - 24.0646754172522, r = (- 10.25660315442401 %i) - 3.504519238155968], [s = (- 6292.524348860235 %i) - 410.7869367176343, r = 0.7719964793016937 %i - 12.04998476312633], [s = 6292.524348860235 %i - 410.7869367176343, r = (- 0.7719964793016937 %i) - 12.04998476312633], [s = 2.12327799215254 %i - 1.963203507062775, r = 10.32033042704814 %i - 6.041386776894663], [s = (- 2.123277992152542 %i) - 1.963203507062787, r = (- 10.32033042704814 %i) - 6.041386776894663], [s = (- 679.9765385392287 %i) - 206.779561956223, r = 7.166372770271967 %i - 13.71096276089619], [s = 679.9765386375868 %i - 206.7795619925398, r = (- 7.166372770271967 %i) - 13.71096276089619], [s = 0.8840854318339831 %i - 0.8267273458721661, r = 11.32290871304799 %i - 15.67873469985804], [s = (- 0.884085431834575 %i) - 0.8267273458714613, r = (- 11.32290871304799 %i) - 15.67873469985804], [s = (- 417.8393384425432 %i) - 548.7962693597634, r = 8.28963078650517 %i - 20.73957857349985], [s = 417.8393383163601 %i - 548.7962694090683, r = (- 8.28963078650517 %i) - 20.73957857349985], [s = 3.898128736921104 %i - 6.518270493395356, r = 18.79120355583143 %i - 16.62794699212315], [s = (- 3.898128736921788 %i) - 6.51827049339595, r = (- 18.79120355583143 %i) - 16.62794699212315], [s = 473.7746171317788 - 1279.518751713014 %i, r = 4.449696686744059 %i - 23.15857708418354], [s = 1279.518750955572 %i + 473.7746152581461, r = (- 4.449696686744059 %i) - 23.15857708418354], [s = - 1.783145464304885, r = 171.7051282051282], 84023 [s = - 1.575618171362852, r = - 219.6631578947369], [s = - -----, r = - 12]] 12195 (%i14) A[1]; (%o14) [s = 403.1435406698565, r = 0.05002238137869293] (%i15)
関数g(s, r)
先渡価格の理論値と実値との差の二乗の和を、関数g(s, r)と置く。 ただし、初期現物価格 を s 、金利を rとする。
4月初めにおける、4月末、7月末、9月末、12月末の先渡価格の実値をそれぞれ、 次に示す。
fapr = 406.50(¢) fjul = 416.64(¢) fsep = 423.48(¢) fdec = 433.84(¢)
先渡価格の理論値を次に示す。
f = s / d(0,M) + ∑c(k) / d(k,M), k = 0...M-1.
割引係数d(k, M)は、年当たりm期間複利で計算する(m=12)。金利rは一定とする。
d(k, M) = 1 / (1 + r / m)M - k
4月末、7月末、9月末、12月末の先渡価格の理論値を表わす関数は、それぞれ次となる。
f4(s,r) = s(1+r/12)1 + c[(1+r/12)1] f7(s,r) = s(1+r/12)4 + c[(1+r/12)4+(1+r/12)3+...+(1+r/12)1] f9(s,r) = s(1+r/12)6 + c[(1+r/12)6+(1+r/12)5+...+(1+r/12)1] f12(s,r) = s(1+r/12)9 + c[(1+r/12)9+(1+r/12)8+...+(1+r/12)1]
である。 ただし、月当たり保有費用 c(k) = c = 20 / 12(¢)である。
4月末、7月末、9月末、12月末の先渡価格の理論値と実値との差の二乗の和である関数 g(s, r)を、次に示す。
g(s, r) = (f4(s,r) - fapr)2 + (f7(s,r) - fjul)2 + (f9(s,r) - fsep)2 + (f12(s,r) - fdec)2
history
2016-12-30 10.3からMaximaによる解法をこのファイル(10.3 別解4)に移動した。
2021-02-19 change XHTML to html5, change shift-jis to utf-8, add viewport.