RunMat
GitHub

cumtrapz — Compute cumulative trapezoidal integration in MATLAB and RunMat.

cumtrapz(Y) computes cumulative trapezoidal integrals of sampled data in Y. The output matches Y in size, with zero at the first element of the integration dimension and running integral values thereafter.

Syntax

Q = cumtrapz(Y)
Q = cumtrapz(Y, dim)
Q = cumtrapz(X, Y)
Q = cumtrapz(X, Y, dim)

Inputs

NameTypeRequiredDefaultDescription
YAnyYesSample values.
dimAnyYesIntegration dimension.
XAnyYesSample points or spacing.

Returns

NameTypeDescription
QNumericArrayCumulative trapezoidal integral output.

Errors

IdentifierWhenMessage
RunMat:cumtrapz:InvalidArgumentInput argument count, dimension selector, or spacing arguments are invalid.cumtrapz: invalid argument
RunMat:cumtrapz:InvalidInputInput values cannot be converted to supported numeric integration domains.cumtrapz: invalid input
RunMat:cumtrapz:InternalIntegration execution fails during gather, allocation, or provider promotion.cumtrapz: internal integration failure

How cumtrapz works

  • cumtrapz(Y) assumes unit spacing between adjacent samples.
  • cumtrapz(X, Y) accepts a scalar spacing, a vector of coordinates whose length matches the working dimension, or an array X with the same size as Y.
  • cumtrapz(..., dim) selects the working dimension explicitly. Dimensions larger than ndims(Y) behave like singleton axes, so the result stays zero along those slices.
  • Logical inputs are promoted to double precision before integration. Complex-valued Y inputs are integrated component-wise and preserve their complex output type.
  • When the selected dimension has length 0 or 1, the output is zero along that dimension because there are no intervals to accumulate.

Does RunMat run cumtrapz on the GPU?

RunMat does not yet expose a native provider hook for cumtrapz. When the input is a gpuArray, the runtime gathers the data to host memory, performs the cumulative trapezoidal integration with MATLAB-compatible dimension and spacing rules, and re-uploads real-valued outputs so downstream GPU work stays resident.

GPU memory and residency

Manual gpuArray promotion is optional. If sampled data already lives on the GPU, RunMat preserves real-valued cumulative results as gpuArrays by re-uploading the output after the host fallback path.

Examples

Computing a cumulative integral with explicit coordinates

x = [0 1 3];
y = [0 1 2];
q = cumtrapz(x, y)

Expected output:

q = [0 0.5 3.5]

Using unit spacing for sampled data

y = [1 2 3];
q = cumtrapz(y)

Expected output:

q = [0 1.5 4]

Accumulating across rows in a matrix

A = [1 2 3; 4 5 6];
q = cumtrapz(A, 2)

Expected output:

q =
     0    1.5    4
     0    4.5   10

Running cumtrapz on GPU data

G = gpuArray([1 2 3]);
q = cumtrapz(G);
result = gather(q)

Expected output:

result = [0 1.5 4]

Using cumtrapz with coding agents

Open a RunMat example with live inputs, then ask the agent to explain how cumtrapz changes the result.

Run a small cumtrapz example, explain the result, then change one input and compare the output.

FAQ

How is cumtrapz different from trapz?

trapz returns the final integrated value, while cumtrapz returns the running integral at every sample.

Why is the first element zero?

There is no interval before the first sample, so the cumulative integral begins at zero.

What forms of X are accepted?

A scalar spacing, a vector of coordinates matching the integration dimension, or an array with the same size as Y.

Does cumtrapz support complex inputs?

Yes. RunMat accumulates the real and imaginary components independently and returns a complex result.

Does cumtrapz keep gpuArray residency?

For real-valued results, yes. RunMat currently gathers GPU inputs to the host, computes the cumulative trapezoidal integral, and re-uploads the result so downstream GPU code can stay resident.

Reduction

all · any · cummax · cummin · cumprod · cumsum · diff · gradient · max · mean · median · min · nnz · prod · std · sum · trapz · var

Elementwise

abs · angle · complex · conj · double · exp · expm1 · factorial · gamma · hypot · imag · ldivide · log · log10 · log1p · log2 · minus · nextpow2 · plus · pow2 · power · rdivide · real · sign · single · sqrt · times

Trigonometry

acos · acosh · asin · asinh · atan · atan2 · atanh · cos · cosd · cosh · deg2rad · rad2deg · sin · sind · sinh · tan · tand · tanh

Signal

blackman · conv · conv2 · deconv · filter · hamming · hann · sawtooth · sinc · square

Rounding

ceil · fix · floor · mod · rem · round

Factor

chol · eig · lu · qr · svd

Solve

cond · det · inv · linsolve · norm · pinv · rank · rcond

Fft

fft · fft2 · fftshift · ifft · ifft2 · ifftshift

Interpolation

interp1 · interp2 · pchip · ppval · spline

Ode

ode15s · ode23 · ode45

Open-source implementation

Unlike proprietary runtimes, every RunMat function is open-source. Read exactly how cumtrapz is executed, line by line, in Rust.

About RunMat

RunMat is an open-source runtime that executes MATLAB-syntax code blazing on any GPU. It is licensed under the Apache 2.0 license.

  • RunMat automatically optimizes your math for GPU execution on Apple, Nvidia, and AMD hardware. No code changes needed. Simulations that took hours now take minutes.
  • Start running code in seconds. RunMat runs in the browser, on the desktop, or from the CLI. No license server, no IT ticket.

Getting started · Benchmarks · Pricing

Download RunMat

Download RunMat for full performance, or use RunMat in your browser for zero setup.