# NPFinancial.jl Documentation

## Functions

`NPFinancial.pv`

— Function.Compute the present value given the future value `fv`

, an interest rate `rate`

and a fixed periodic payment `pmt`

over a number of periods `nper`

. The payment is expected to be paid at the beginning of each period (`:begin`

) or `:end`

of the period, as specified in the `when`

argument.

`NPFinancial.fv`

— Function.Compute the future value given the present value `pv`

, an interest rate `rate`

that is compounded once per period, over `nper`

number of periods. A fixed payment `pmt`

may be specified in the `when`

argument, which is paid either at the beginning of each period (`:begin`

) or `:end`

of the period.

**Examples**

```
julia> fv(0.05, 1, 0, -100)
105.0
julia> fv(0.05, 2, 0, -100)
110.25
```

`NPFinancial.pmt`

— Function.Compute the payment given the present value `pv`

, an interest rate `rate`

that is compounded once per period, over `nper`

number of periods, such that at the end of the last period the value becomes `fv`

. The payment is expected to be paid at the beginning of each period (`:begin`

) or `:end`

of the period, as specified in the `when`

argument.

**Examples**

Let's say I have need to repay a mortage loan with amount 300000 (present value) with monthly interst rate of 4.25% over the next 30 years. What would be my monthly payment?

```
julia> pmt(0.0425/12, 30*12, 300000)
-1475.8196732384283
```

`NPFinancial.nper`

— Function.Compute how many periods the present value `pv`

may accrue/repaid till the future value `fv`

given a specific interest rate `rate`

and a fixed payment `pmt`

. The payment is expected to be paid at the beginning of each period (`:begin`

) or `:end`

of the period, as specified in the `when`

argument.

`NPFinancial.ipmt`

— Function.Compute the interest component of the periodic payment. This useful for any loan that has a repayment schedule.

**Examples**

Let's say I have need to repay a mortage loan with amount 300000 (present value) with monthly interst rate of 4.25% over the next 30 years. What would be the interest component of my monthly payment? Initially, the interest component is a large part of the payment but towards the end, it would be a smaller portion as illustrated below for periods 1, 2, 3, 358, 359, and 360:

```
julia> pmt(0.0425/12, 30*12, 300000)
-1475.8196732384283
julia> ipmt.(0.0425/12, [1,2,3,358,359,360], 30*12, 300000)
6-element Array{Float64,1}:
-1062.5
-1061.04
-1059.57
-15.5702
-10.3984
-5.20841
```

`NPFinancial.ppmt`

— Function.Compute the principal component of the periodic payment. This useful for any loan that has a repayment schedule.

**Examples**

```
julia> pmt(0.0425/12, 30*12, 300000)
-1475.8196732384283
julia> ppmt.(0.0425/12, [1,2,3,358,359,360], 30*12, 300000)
6-element Array{Float64,1}:
-413.32
-414.784
-416.253
-1460.25
-1465.42
-1470.61
```

`NPFinancial.rate`

— Function.Compute interest rate given present value `pv`

, future value `fv`

, and fixed periodic payment `pmt`

over a number of periods `nper`

.

This implementation uses Newton's iteration until the change is less than 1e-6. Newton's rule is

r_{n+1} = r_{n} - g(r_n)/g'(r_n)

where

g(r) is the formula

g'(r) is the derivative with respect to r.

**Examples**

```
julia> rate(1, 0, -100, 101)
0.010000000000000155
```

`NPFinancial.npv`

— Method.Compute the Net Present Value (NPV) of a cash flow series `values`

given an internal rate of return `rate`

.

The (fixed) time interval between cash flow "events" must be the same as that for which `rate`

is given (i.e., if `rate`

is per year, then precisely a year is understood to elapse between each cash flow event). By convention, investments or "deposits" are negative, income or "withdrawals" are positive; `values`

must begin with the initial investment, thus `values[1]`

will typically be negative.

**Examples**

```
julia> npv(0.281,[-100, 39, 59, 55, 20])
-0.00847859163845488
```

**Reference**

L. J. Gitman, "Principles of Managerial Finance, Brief," 3rd ed., Addison-Wesley, 2003, pg. 346.

`NPFinancial.irr`

— Method.Calculate internal rate of return given an array of cash flow `values`

(nearest one first)

**Examples**

```
julia> irr([-100, 101])
0.010000000000000009
```

`NPFinancial.mirr`

— Method.Compute the modified internal rate of return (MIRR) given a series of cash flows, a `finance_rate`

(interest rate paid on the cash flows) and `reinvest_rate`

(interest rate received on the cash flows upon reinvestment).