contents

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.