RunMat
GitHub

log — Compute natural logarithms element-wise in MATLAB and RunMat.

Y = log(X) computes the natural logarithm of each element of X. Domain promotion to complex values and type handling follow MATLAB semantics.

Syntax

Y = log(X)

Inputs

NameTypeRequiredDefaultDescription
XAnyYesNumeric, logical, char, or complex input.

Returns

NameTypeDescription
YNumericArrayElementwise natural-log result.

Errors

IdentifierWhenMessage
RunMat:log:InvalidInputInput cannot be interpreted as numeric, logical, char, or complex data.log: invalid input
RunMat:log:InternalInternal tensor construction or provider interaction failed.log: internal error

How log works

  • log(X) applies the operation element-wise with MATLAB broadcasting rules.
  • Logical values convert to doubles (true → 1.0, false → 0.0) before the logarithm is taken.
  • Character arrays are interpreted as their numeric code points and return dense double tensors.
  • Negative real values produce complex results: log([-1 1]) returns [0 + iπ, 0].
  • Complex inputs follow MATLAB's definition: log(a + bi) = log(|a + bi|) + i·atan2(b, a).
  • log(0) returns -Inf, matching MATLAB's handling of the logarithm singularity at zero.

Does RunMat run log on the GPU?

RunMat Accelerate keeps tensors on the GPU when the active provider implements unary_log *and* reduce_min. The runtime queries the device-side minimum to confirm that all values are non-negative, so positive datasets stay resident and can participate in fused elementwise kernels. When complex outputs are required or the provider cannot supply these hooks, RunMat gathers the tensor to the host, computes the exact MATLAB-compatible result (including complex promotion), updates residency metadata, and returns the host-resident value.

GPU memory and residency

You typically do not need to call gpuArray yourself. The auto-offload planner tracks residency and keeps tensors on the GPU when profitable. When your expression produces complex results (e.g., negative inputs to log), RunMat will gather the data automatically and still return exactly the MATLAB-compatible output. You can force explicit residency with gpuArray and gather if you want to mirror MathWorks MATLAB workflows.

Examples

Natural log of a positive scalar

y = log(exp(3))

Expected output:

y = 3

Understanding log of zero

value = log(0)

Expected output:

value = -Inf

Taking the logarithm of negative values

data = [-1 -2 -4];
result = log(data)

Expected output:

result = [0.0000 + 3.1416i, 0.6931 + 3.1416i, 1.3863 + 3.1416i]

Applying log to complex numbers

z = [1+2i, -1+pi*i];
w = log(z)

Expected output:

w = [0.8047 + 1.1071i, 1.1447 + 1.2626i]

Element-wise log on a matrix living on the GPU

G = gpuArray([1 2; 4 8]);
out = log(G);
result = gather(out)

Expected output:

result = [0.0000 0.6931; 1.3863 2.0794]

Logging character codes from a string

C = 'ABC';
values = log(C)

Expected output:

values = [4.1744 4.1897 4.2047]

Using log with coding agents

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

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

FAQ

When should I use the log function?

Use log whenever you need the natural logarithm of your data—for example, to linearize exponential growth, compute likelihoods, or transform multiplicative relationships into additive ones.

What happens if the input contains zeros?

log(0) returns negative infinity (-Inf). Entire tensors follow the same rule element-wise.

How are negative real numbers handled?

Negative values automatically promote to complex results: log(-x) returns log(x) + iπ. This matches MATLAB behaviour and avoids losing information compared with returning NaN.

What about tiny floating-point noise producing small negative numbers?

Values that are numerically negative (e.g., -1e-15) are treated just like other negatives and promote to complex outputs. Use abs or max to clip values if you require a purely real result.

Does the GPU implementation support complex outputs?

Providers currently operate on real buffers. When complex results are required, RunMat gathers data to the host to compute the exact result and keeps residency metadata consistent.

Does log accept complex inputs directly?

Yes. Complex scalars and tensors follow the MATLAB definition using magnitude and phase (log(|z|) + i·angle(z)).

Elementwise

abs · angle · complex · conj · double · exp · expm1 · factorial · gamma · heaviside · hypot · imag · ldivide · 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

Reduction

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

Rounding

ceil · fix · floor · mod · rem · round

Factor

chol · eig · lu · qr · svd

Solve

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

Symbolic

digits · int · limit · sym · syms · vpa

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 log 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.