cumprod

Symbolic cumulative product

Description

example

B = cumprod(A) returns the cumulative product of A starting at the beginning of the first array dimension in A whose size does not equal 1. The output B has the same size as A.

• If A is a vector, then cumprod(A) returns a vector containing the cumulative product of the elements of A.

• If A is a matrix, then cumprod(A) returns a matrix containing the cumulative products of each column of A.

• If A is a multidimensional array, then cumprod(A) acts along the first nonsingleton dimension.

example

B = cumprod(A,dim) returns the cumulative product along dimension dim. For example, if A is a matrix, then cumprod(A,2) returns the cumulative product of each row.

example

B = cumprod(___,direction) specifies the direction using any of the previous syntaxes. For instance, cumprod(A,2,'reverse') returns the cumulative product within the rows of A by working from end to beginning of the second dimension.

example

B = cumprod(___,nanflag) specifies whether to include or omit NaN values from the calculation for any of the previous syntaxes. cumprod(A,'includenan') includes all NaN values in the calculation while cumprod(A,'omitnan') ignores them.

Examples

collapse all

Create a symbolic vector. Find the cumulative product of its elements.

syms x
A = (1:5)*x
A = $\left(\begin{array}{ccccc}x& 2 x& 3 x& 4 x& 5 x\end{array}\right)$

In the vector of cumulative products, element B(2) is the product of A(1) and A(2), while B(5) is the product of elements A(1) through A(5).

B = cumprod(A)
B = $\left(\begin{array}{ccccc}x& 2 {x}^{2}& 6 {x}^{3}& 24 {x}^{4}& 120 {x}^{5}\end{array}\right)$

Create a 3-by-3 symbolic matrix A whose all elements are x.

syms x
A = ones(3)*x
A =

$\left(\begin{array}{ccc}x& x& x\\ x& x& x\\ x& x& x\end{array}\right)$

Compute the cumulative product of elements of A. By default, cumprod returns the cumulative product of each column.

B = cumprod(A)
B =

$\left(\begin{array}{ccc}x& x& x\\ {x}^{2}& {x}^{2}& {x}^{2}\\ {x}^{3}& {x}^{3}& {x}^{3}\end{array}\right)$

To compute the cumulative product of each row, set the value of the dim option to 2.

B = cumprod(A,2)
B =

$\left(\begin{array}{ccc}x& {x}^{2}& {x}^{3}\\ x& {x}^{2}& {x}^{3}\\ x& {x}^{2}& {x}^{3}\end{array}\right)$

Create a 3-by-3-by-2 symbolic array.

syms x y
A(:,:,1) = [x y 0; x 3 x*y; x 1/3 y];
A(:,:,2) = [x y 3; 3 x y; y 3 x];
A
A(:,:,1) =

$\left(\begin{array}{ccc}x& y& 0\\ x& 3& x y\\ x& \frac{1}{3}& y\end{array}\right)$

A(:,:,2) =

$\left(\begin{array}{ccc}x& y& 3\\ 3& x& y\\ y& 3& x\end{array}\right)$

Compute the cumulative product along the rows by specifying dim as 2. Specify the 'reverse' option to work from right to left in each row. The result is the same size as A.

B = cumprod(A,2,'reverse')
B(:,:,1) =

$\left(\begin{array}{ccc}0& 0& 0\\ 3 {x}^{2} y& 3 x y& x y\\ \frac{x y}{3}& \frac{y}{3}& y\end{array}\right)$

B(:,:,2) =

$\left(\begin{array}{ccc}3 x y& 3 y& 3\\ 3 x y& x y& y\\ 3 x y& 3 x& x\end{array}\right)$

To compute the cumulative product along the third (page) dimension, specify dim as 3. Specify the 'reverse' option to work from the largest page index to the smallest page index.

B = cumprod(A,3,'reverse')
B(:,:,1) =

$\left(\begin{array}{ccc}{x}^{2}& {y}^{2}& 0\\ 3 x& 3 x& x {y}^{2}\\ x y& 1& x y\end{array}\right)$

B(:,:,2) =

$\left(\begin{array}{ccc}x& y& 3\\ 3& x& y\\ y& 3& x\end{array}\right)$

Create a symbolic vector containing NaN values. Compute the cumulative products.

A = [sym('a') sym('b') 1 NaN 2]
A = $\left(\begin{array}{ccccc}a& b& 1& \mathrm{NaN}& 2\end{array}\right)$
B = cumprod(A)
B = $\left(\begin{array}{ccccc}a& a b& a b& \mathrm{NaN}& \mathrm{NaN}\end{array}\right)$

You can ignore NaN values in the cumulative product calculation using the 'omitnan' option.

B = cumprod(A,'omitnan')
B = $\left(\begin{array}{ccccc}a& a b& a b& a b& 2 a b\end{array}\right)$

Input Arguments

collapse all

Input array, specified as a symbolic vector, matrix, or multidimensional array.

Dimension to operate along, specified as a positive integer scalar. If no value is specified, then the default is the first array dimension whose size does not equal 1.

Consider a two-dimensional input array, A.

• cumprod(A,1) works on successive elements in the columns of A and returns the cumulative product of each column.

• cumprod(A,2) works on successive elements in the rows of A and returns the cumulative product of each row. cumprod returns A if dim is greater than ndims(A).

Direction of cumulation, specified as 'forward' (default) or 'reverse'.

• 'forward' works from 1 to end of the active dimension.

• 'reverse' works from end to 1 of the active dimension.

Data Types: char

NaN condition, specified as:

• 'includenan' — Include NaN values from the input when computing the cumulative products, resulting in NaN values in the output.

• 'omitnan' — Ignore all NaN values in the input. The product of elements containing NaN values is the product of all non-NaN elements. If all elements are NaN, then cumprod returns 1.

Data Types: char

Output Arguments

collapse all

Cumulative product array, returned as a vector, matrix, or multidimensional array of the same size as the input A.

collapse all

First Nonsingleton Dimension

The first nonsingleton dimension is the first dimension of an array whose size is not equal to 1.

For example:

• If X is a 1-by-n row vector, then the second dimension is the first nonsingleton dimension of X.

• If X is a 1-by-0-by-n empty array, then the second dimension is the first nonsingleton dimension of X.

• If X is a 1-by-1-by-3 array, then the third dimension is the first nonsingleton dimension of X.