Annuity
詳細とオプション
- Annuityオブジェクトは一連の支払いを伴う金融商品を指定する.これは,住宅ローン,ローンの割賦償還,公社債等を表す.
- TimeValue[Annuity[…],interest,t]は年金の時間的価値を時間 t に1回払いしたのと等しいものとして計算する.
- Annuityは数あるいは任意の記号式で与えることができる.
- Annuity[p,t]では,支払いは1,2,…,t 回起るものと仮定される.
- Annuity[p,t,q]では,支払いは q,2q,…,t に発生する.
- TimeValue[Annuity[p,t,q],r,s]は s≤0については現行値を,s≥t については未来の値を与える.
- 一般的な住宅ローンの現行値はTimeValue[Annuity[p,t,q],r,0]で与えられる.
- 典型的な公社債の値はTimeValue[Annuity[{p,{0,pfinal}},t,q],r,0]で与えられる.
- 複利区間 d とは異なる支払い区間が q の年金はTimeValue[Annuity[p,t,q],EffectiveInterest[r,d],s]で与えられる.
- Annuity[function,…]は支払いが時間の関数として与えられる年金を表す.
- Annuity[function,t,0]では,支払い率は0から t まで積分された時間の連続関数であると考えられる.
- 離散支払い関数は循環関係として定義されることもある.RSolveを使って循環関係をAnnuity[function,t,q]で使われる時間のみの関数に変換することができる.
- Annuity[{function,pinitial,pfinal},…]は支払いを時間の関数と頭金と最終支払いとして指定する.
- Annuity[p,Infinity,…]は永続性を表す.
例題
すべて開く すべて閉じる例 (2)
1回の払い込みが1000ドルで払い込み回数が10回,実行利息6%の年金の現在価値:
TimeValue[Annuity[1000, 10], .06, 0]TimeValue[Annuity[{1000, {p1, p2}}, 10], .06, 0]TimeValue[Annuity[1000, 10, 1 / 2], .06, 10]TimeValue[Annuity[{1000, {p1, p2}}, 10, 1 / 2], .06, 10]スコープ (11)
永続性を指定するために支払い回数としてInfinityを使うことがある:
TimeValue[Annuity[100, Infinity], .06, 0]1回の払い込みが1000ドルで払い込み回数が5回,名目8%で年4回複利計算される年金の将来価値:
TimeValue[Annuity[1000, 5], EffectiveInterest[.08, 1 / 4], 5]TimeValue[Annuity[1000, 5, 1 / 2], EffectiveInterest[.08, 1 / 4], 5]額面1000ドル,30年間で利払いが年2回ある年利6%で利回り5%の利付き公社債:
TimeValue[Annuity[{(.06/2)1000, 0, 1000}, 30, 1 / 2], EffectiveInterest[.05, 1 / 2], 0]TimeValue[Annuity[100 1.1^# - 1&, 10], .05, 10]1期間の積み立て総額が100ドルになるような割合での連続支払いフローによる10期間の年金の将来価値:
TimeValue[Annuity[100&, 10, 0], .05, 10]所定期間内に1ドルずつ100回支払いを行う非常に高頻度のタイプの年金と値が似ている点に注目のこと:
TimeValue[Annuity[1, 10, 1 / 100], .05, 10]Annuityは記号パラメータと使うことができる.TimeValue[Annuity[…],…]は閉形の式を求めることができる:
TimeValue[Annuity[pmt(1 + g)^f# - 1&, n, 1 / f], r, t]TimeValue[Annuity[p Log[#]&, n], r, 0]Apartを使って個々の支払いの割引係数を明らかにすることができる:
Apart[TimeValue[Annuity[pmt, 5], r, 0]]式を完全に分解するためにApartは複数回適用しなければならないことがある:
TimeValue[Annuity[pmt(1 + g)^# - 1&, 5], r, 0]//Apart%//ApartAnnuityを含む式の解は記号パラメータによって求めることができる:
Solve[TimeValue[Annuity[pmt, n, 1 / f], r, n] == val, pmt]支払い区間として整数を使って,数回の支払い区分ごとに1回のみ発生する支払いを指定することができる:
TimeValue[Annuity[1, 10, 2], r, 0]//Apart連続的な支払いフローの年金は利力指定と組み合せることができる:
TimeValue[Annuity[Sqrt[#]&, n, 0], (1/1 + #)&, n]配当が一定の率で成長する普通株の継続時間を微分関数Dを使って計算する:
val = TimeValue[Annuity[div (1 + g)^# - 1&, Infinity], r, 0]duration = (-(1 + r)/val)D[val, r]duration /. {r -> .05, g -> .03}アプリケーション (19)
3年で5,000 ドルのローンを返済するために必要な月々の支払い額:
Solve[TimeValue[Annuity[pmt, 3, 1 / 12], .08, 0] == 5000, pmt]名目金利5.2%で30年間に渡って償却される200,000ドルの住宅ローンの月々の支払額を計算する:
Solve[TimeValue[Annuity[pmt, 30, 1 / 12], EffectiveInterest[.052, 1 / 12], 0] == 200000, pmt]月額200ドル,実効金利8%で10,000ドルのローンを完済するのにかかる年数:
Solve[TimeValue[Annuity[200, n, 1 / 12], .08, 0] == 10000, n]TimeValue[AnnuityDue[1000, 7], EffectiveInterest[.08, 1 / 4], -5]FindRoot[TimeValue[Annuity[{(.07/2) * 1000, {0, 1000}}, 10, 1 / 2], EffectiveInterest[yld, 1 / 2], 0] == 900, {yld, .1}]1000ドルを年利8%の四半期複利で投資し,きっかり10年後に資金を使い切るとすると,各四半期の終りごとにいくら引き出すことができるかを求める:
Solve[TimeValue[Annuity[{wd, {-1000}}, 10, 1 / 4], EffectiveInterest[.08, 1 / 4], 10] == 0, wd]5年間四半期の終りごとに1000ドル支払われる場合に,現在価値が16000ドルである利率を四半期複利で求める:
FindRoot[TimeValue[Annuity[1000, 5, 1 / 4], EffectiveInterest[r, 1 / 4], 0] == 16000 , {r, .05}]実行利率が最初の6年間は5%,残りの4年間が4%である場合に,年額100ドルの10年間の累積値を求める:
TimeValue[Annuity[100, 10], {{0, .05}, {6, .04}}, 10]TimeValue[Annuity[1 , 5], .02#&, 5]3000ドルのローンを四半期ごとの支払いで5年後までに支払い終らなければければならない.利率が10%で半年複利だとした場合の各四半期の支払額を求める:
Solve[TimeValue[Annuity[p, 5, 1 / 4], EffectiveInterest[.1, 1 / 2], 0] == 3000, p]1回の支払いが1に等しくなるような20期間連続的に支払いを行う年金の将来の価値が,10期間の年金の将来価値の3倍になる利力を求める:
FindRoot[TimeValue[Annuity[1&, 20, 0], d&, 20] == 3TimeValue[Annuity[1&, 10, 0], d&, 10] , {d, .05}]実行利息5%で連続する支払いが1,2,3,... の永続年金の現行値を求める:
TimeValue[Annuity[#&, Infinity, 1], .05, 0]RSolve[{payment[i + 1] == g + payment[i], payment[1] == p}, payment[i], i]TimeValue[Annuity[-g + g # + p&, Infinity], r]支払いが1ドルから始まって10ドルになるまで支払い回ごとに1ドルずつ増え,その後は全15回の支払いが終るまで10ドルずつ支払う年金の現在価値について利子の観点から式を求める:
TimeValue[Annuity[If[# < 10, #, 10]&, 15], r, 0]//Apart支払いが1ドルから始まり10ドルになるまで支払い回ごとに1増え,その後0ドルになるまで支払い回ごとに1ドル減る年金の現行値の式を利子の観点から求める:
TimeValue[Annuity[If[# <= 10, #, 10 - (# - 10)]&, 20], r, 0]//Apart1000ドルで支払いが始まりその後4%ずつ増加する7%で20回払いの年金の現行値(最初の支払いの2年前)を求める:
TimeValue[Annuity[1000 1.04^# - 1&, 20], .07, -2]利率の観点から3年目の終りに1,6年目の終りに2,9年目の終りに3という風に支払われる永続年金の現行値を求める:
TimeValue[Annuity[# / 3&, Infinity, 3], r, 0](一定の)利力を δ,時間 t における年ごとの支払いの利率を t2 として,連続的に増加する年金の現行値の式を n 年についてを求める:
TimeValue[Annuity[#^2&, n, 0], δ&, 0]t 時点で支払われる1ドルの死亡給付金の期待現在価値.t はGompertz–Makeham分布から抽出されるものとする:
nsp = Expectation[TimeValue[1, EffectiveInterest[r, 0], {0, t}], tGompertzMakehamDistribution[a, b]]支払いストリームの期待現在価値を純一時保険料と等しくするために必要な,毎年前払いされる保険料を求める:
Solve[Expectation[TimeValue[AnnuityDue[premium, t], EffectiveInterest[r, 0], 0], tGompertzMakehamDistribution[a, b]] == nsp, premium]ローンの残高は常に残りの将来の支払いの現在価値に等しいため,Annuityを使って償却表が作成できる:
years = 30;monthlyPayment = 1199.10;monthlyRate = .06 / 12;loanValue[month_] = TimeValue[Annuity[monthlyPayment, years * 12 - month], monthlyRate, 0]amortizationList = Table[{i + 1, loanValue[i], monthlyPayment, loanValue[i] * monthlyRate, monthlyPayment - loanValue[i] * monthlyRate, loanValue[i + 1]}, {i, 0, years * 12 - 1}]//Round;amortizationTable[month1_, month2_] := TableForm[amortizationList[[month1 ;; month2]], TableHeadings -> {None, {"month", "beg value", "payment", "interest", "principal", "end value"}}]amortizationTable[1, 12]ListLinePlot[Table[{i + 1, loanValue[i]}, {i, 0, years * 12 - 1}], AxesLabel -> {"month", "loan balance"}, ImageSize -> 300]特性と関係 (7)
TimeValueはキャッシュフローの基準点の引数を取る.この引数は年金支払額のシミュレーションにAnnuityと一緒に使うことができる:
TimeValue[Annuity[1000, 10], .06, {0, -1}]TimeValue[AnnuityDue[1000, 10], .06, 0]AnnuityはシフトされたAnnuityDueである:
TimeValue[Annuity[p, t, q], r, n]TimeValue[AnnuityDue[p, t, q], r, n - q]%% / %年金の支払い増加パターンは,任意のWolfram言語関数または任意のユーザ定義関数にすることができる:
TimeValue[Annuity[Sin[#]&, 10], r, 0]//ApartTimeValue[Annuity[If[# < 5, #, 5]&, 10, 1], r, 0]//ApartRSolveは,再帰関係を時間のみの関数に変換するために使用できる:
RSolve[{payment[i + 1 / 2] == (1 + growth)payment[i], payment[1 / 2] == 10}, payment[i], i]上記の再帰関係は,毎回の支払額が一定の割合で増加することを示している.その解は時間のみの関数で,Annuityでの使用に適している:
TimeValue[Annuity[10 (1 + growth)^-1 + 2 #&, 5, 1 / 2], r, 0]g1 = TimeValue[Annuity[100&, n, 0], .5, n];{g2, g3, g4, g5} = Table[TimeValue[Annuity[100 / i, n, 1 / i], .5, n], {i, 1, 4}];Plot[{g1, g2, g3, g4, g5}, {n, 1, 5}, Epilog -> Block[{n = 4.9}, Arrow[{{n, g2}, {n, g1}}]]]正弦曲線支払いストリームの年金支払いと年金の累積値を時間の関数としてプロットする:
pmts = Cashflow[Annuity[Ceiling[100Sin[.3#]]&, 60]][[1]];g1 = ListPlot[pmts, Filling -> Axis, AspectRatio -> 1 / 2, ImageSize -> 400]totalval = TimeValue[Annuity[100Sin[.3#]&, t], .02, t]g2 = Plot[totalval, {t, 0, 60}, PlotStyle -> Orange];Show[{g1, g2}, PlotRange -> All]PlotとPlot3Dを使って年金が一連の変数に及ぼすさまざまな依存関係を調べる:
g1 = TimeValue[Annuity[pmt (1 + g)^f# - 1&, n, 1 / f], EffectiveInterest[r, 1 / c], n]Plot[g1 /. {pmt -> 100, f -> 2, n -> 10, c -> 2, g -> .1}, {r, .01, .15}, AxesLabel -> {"interest", "value"}, ImageSize -> 250]Plot[g1 /. {pmt -> 150, f -> 2, n -> 10, c -> 2, r -> .07}, {g, -.2, .2}, AxesLabel -> {"payment growth rate", "value"}, ImageSize -> 300]Plot3Dを使って金利/成長率の状況を見る:
Plot3D[g1 /. {pmt -> 100, f -> 2, n -> 10, c -> 2}, {r, .01, .15}, {g, -.2, .2}, AxesLabel -> {"interest", "growth", "value"}, ImageSize -> 250]考えられる問題 (3)
長期あるいは高頻度の年金額あるいは公社債の利率の解を求める際は,FindRootの方がSolveよりはるかに速い:
Solve[yld > 0 && TimeValue[Annuity[{(.07/2) * 1000, {0, 1000}}, 10, 1 / 2], yld, 0] == 900, yld]//QuietFindRoot[TimeValue[Annuity[{(.07/2) * 1000, {0, 1000}}, 10, 1 / 2], yld, 0] == 900, {yld, .05}]TimeValue[Annuity[function,…],…]はSumやIntegrateでは明示的に解けない式を返すことがある.そのような場合にはK変数を指標あるいは積分器として使う:
TimeValue[Annuity[LegendreP[p, #]&, n], r, 0]TimeValue[Annuity[LegendreP[p, #]&, n, 0], r, 0]Annuityオブジェクトの支払い間の査定期間を指定する際は,TimeValueで査定期間の前のすべてのキャッシュフローの将来の値と査定期間後のすべてのキャッシュフローの現在値を計算する:
TimeValue[Annuity[100, 5], .08, 2.5]AnnuityオブジェクトをCashflowオブジェクトに変換すると支払い構造が明らかになる:
Cashflow[Annuity[100, 5]]上記の年金の値はここに示された現在額および将来の値の和に等しい:
TimeValue[Cashflow[{{1, 100}, {2, 100}}], .08, 2.5] + TimeValue[Cashflow[{{3, 100}, {4, 100}, {5, 100}}], .08, 2.5]インタラクティブな例題 (1)
Manipulateを使って,変数集合に対して年金が持つさまざまな依存関係を調べる:
Manipulate[
Plot[
Evaluate[
TimeValue[Annuity[pmt, n], EffectiveInterest[r, 1 / c], n]
],
{n, 5, 30}, AxesLabel -> {"time", "value"}
],
{{pmt, 150, "payment"}, 100, 300}, {{r, .05, "interest"}, .01, .15}, {{c, 2, "compounding"}, 1, 10}, FrameLabel -> "future value of an annuity"
]おもしろい例題 (1)
インフレ調整後の支払いが株式市場に投資され,退職時の累積額がその後インフレ調整後の支払いをする終身年金に投資されると仮定して,退職金計算機を構築する:
assumptions = {marketRate -> .08, annuityRate -> .05, inflation -> .03, yearsToFinalAge -> 45, yearsToRetirement -> 20};futureValueAnnuity1 = TimeValue[Annuity[presentValuePaymentMade (1 + inflation / 12)^12 # - 1&, yearsToRetirement , 1 / 12], marketRate, yearsToRetirement];presentValueAnnuity2 = TimeValue[Annuity[presentValuePaymentReceived(1 + inflation / 12)^yearsToRetirement * 12 (1 + inflation / 12)^12 # - 1&, yearsToFinalAge - yearsToRetirement, 1 / 12], annuityRate, 0] ;sol = Solve[presentValueAnnuity2 == futureValueAnnuity1, presentValuePaymentReceived]//Flatten//Simplifyいくつかの異なる市場状況を仮定して,退職時に(インフレ調整済み)支払いを受けるために今日口座に振り込まなければならない(インフレ調整済み)支払額をプロットする:
plotFunctions = Table[presentValuePaymentReceived /. (sol /. Prepend[assumptions, marketRate -> j]),
{j, .05, .12, .01}];Plot[
plotFunctions,
{presentValuePaymentMade, 50, 500}, GridLines -> Automatic, Frame -> True, Axes -> None, FrameLabel -> {"(inflation adjusted) payment made into retirement account", "Present value of (inflation adjusted)
payment received at retirement"}, PlotLabel -> "Annuity Rate = " <> ToString[100 * (annuityRate /. assumptions)] <> "%, Stock Mkt Rate 5-10%", ImageSize -> 400, BaseStyle -> (FontFamily -> "Helvetica")]退職金口座に指定の(インフレ調整済み)現行支払いを行った場合に指定の(インフレ調整済み)退職金の支払いを受けるために必要な株式市場の金利と最終的な年金の金利の組み合せをプロットする:
myPresentValuePaymentMade = 500;myPresentValuePaymentReceived = 1000;paymentAsFunctionOfRates = (presentValuePaymentReceived /. sol /. Flatten[Prepend[assumptions, {presentValuePaymentMade -> myPresentValuePaymentMade, marketRate -> r1, annuityRate -> r2}]])//Simplify;ratePlotData = Table[{i, r2 /. FindRoot[paymentAsFunctionOfRates - myPresentValuePaymentReceived /. r1 -> i, {r2, 0}]}, {i, .05, .12, .005}];ListLinePlot[ratePlotData, GridLines -> Automatic, AxesLabel -> {"stock market rate", "annuity rate"}, PlotLabel -> "Combination of stock mkt rate vs. annuity rate
necessary in order to receive a future (inflation adjusted)
payment of " <> ToString[myPresentValuePaymentReceived] <> " by making a current (inflation adjusted) payment of " <> ToString[myPresentValuePaymentMade] , ImageSize -> 500, BaseStyle -> (FontFamily -> "Helvetica")]指定の(インフレ調整済み)現行支払いで,退職年齢と指定の(インフレ調整済み)退職金を受け取るために必要な最終年齢を組み合せてプロットする:
myPresentValuePaymentMade2 = 400;myPresentValuePaymentReceived2 = 1000;currentAge = 40;paymentAsFunctionOfAge = (presentValuePaymentReceived /. sol /. Flatten[Prepend[assumptions, {presentValuePaymentMade -> myPresentValuePaymentMade2, yearsToFinalAge -> yfa, yearsToRetirement -> yr}]])//Simplifysol0 = 7.;sol1 = 7.;
ratePlotData2 = Table[
{sol0, sol1} = {sol1, yfa /. FindRoot[paymentAsFunctionOfAge - myPresentValuePaymentReceived2 /. yr -> i, {yfa, 2sol1 - sol0}]};
{currentAge + i, currentAge + sol1}, {i, 5, 30}];ListLinePlot[ratePlotData2, GridLines -> Automatic, AxesLabel -> {"retirement age", "final age"}, PlotLabel -> "Combination of retirement age vs. final age
necessary in order to receive a future (inflation adjusted)
payment of " <> ToString[myPresentValuePaymentReceived] <> " by making a current (inflation adjusted) payment of " <> ToString[myPresentValuePaymentMade] , ImageSize -> 500, BaseStyle -> (FontFamily -> "Helvetica")]テキスト
Wolfram Research (2010), Annuity, Wolfram言語関数, https://reference.wolfram.com/language/ref/Annuity.html.
CMS
Wolfram Language. 2010. "Annuity." Wolfram Language & System Documentation Center. Wolfram Research. https://reference.wolfram.com/language/ref/Annuity.html.
APA
Wolfram Language. (2010). Annuity. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/Annuity.html
BibTeX
@misc{reference.wolfram_2026_annuity, author="Wolfram Research", title="{Annuity}", year="2010", howpublished="\url{https://reference.wolfram.com/language/ref/Annuity.html}", note=[Accessed: 07-August-2026]}
BibLaTeX
@online{reference.wolfram_2026_annuity, organization={Wolfram Research}, title={Annuity}, year={2010}, url={https://reference.wolfram.com/language/ref/Annuity.html}, note=[Accessed: 07-August-2026]}