Main Content


Present value of varying cash flow



PresentVal = pvvar(CashFlow,Rate) calculates present value of a varying cash flow.


PresentVal = pvvar(___,CFDates) adds an optional argument for CFDates.


collapse all

Calculate the net present value for a regular and irregular cash flow.

Regular Cash Flow

This cash flow represents the yearly income from an initial investment of $10,000. The annual interest rate is 8%.

Year 1 - $2000

Year 2 - $1500

Year 3 - $3000

Year 4 - $3800

Year 5 - $5000

To calculate the net present value of this regular cash flow:

PresentVal = pvvar([-10000 2000 1500 3000 3800 5000], 0.08)
PresentVal = 1.7154e+03

Irregular Cash Flow

An investment of $10,000 returns this irregular cash flow. The original investment and its date are included. The periodic interest rate is 9%.

January 12, 1987 - ($10000)

February 14, 1988 - $1500

March 3, 1988 - $2000

June 14, 1988 - $3000

December 1, 1988 - $4000

To calculate the net present value of this irregular cash flow:

CashFlow = [-10000, 1500, 2000, 3000, 4000];

CFDates = ['01/12/1987'

PresentVal = pvvar(CashFlow, 0.09, CFDates)
PresentVal = -768.1461

The net present value of the same investment under different discount rates of 7%, 9%, and 11% is obtained by:

PresentVal = pvvar(repmat(CashFlow,3,1)', [.07 .09 .11], CFDates)
PresentVal = 1×3
103 ×

   -0.5099   -0.7681   -1.0146

Input Arguments

collapse all

Cash flow amounts, specified as a vector of varying cash flows. Include the initial investment as the initial cash flow value (a negative number). If CashFlow is a matrix, each column is treated as a separate cash-flow stream.

Data Types: double

Periodic interest rate, specified as a decimal. If CashFlow is a matrix, a scalar Rate is allowed when the same rate applies to all cash-flow streams in CashFlow. When multiple cash-flow streams require different discount rates, Rate must be a vector whose length equals the number of columns in CashFlow.

Data Types: double

(Optional) Indicates irregular cash flow, specified as a datetime array, string array, or cell array of date character vectors on which the cash flows occur.

Specify CFDates when there are irregular (nonperiodic) cash flows. The default assumes that CashFlow contains regular (periodic) cash flows. If CashFlow is a matrix, and all cash-flow streams share the same dates, CFDates can be a vector whose length matches the number of rows in CashFlow. When different cash-flow streams have different payment dates, specify CFDates as a matrix the same size as CashFlow.

To support existing code, pvvar also accepts serial date numbers as inputs, but they are not recommended.

Data Types: cell | string | char | datetime

Output Arguments

collapse all

Present value, returns the net present value of a varying cash flow. Present value is calculated at the time the first cash flow occurs.

Version History

Introduced before R2006a

expand all