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.