NMGrapherGRAPHING CALCULATOR
Scroll to zoom · drag to pan · double-click to resetx [−10, 10]   y [−7, 7]

Surface controls

Display settings apply to surfaces in this worksheet. Adjust them instantly using existing samples. To calculate a different domain, use Input range or edit a saved graph.

X axis
Y axis
Z axis

Leave both limits blank for automatic axes or colors. Log axes require positive values. Equal data units preserve relative distances; the vertical ratio applies only to Custom vertical ratio.

Name your graph

Built-in functions

Choose a function to insert it at the cursor. Selected text fills the first argument; the inserted argument stays selected for editing. Hold the pointer over a function for its convention and syntax.

Wavelet signal studio

Analyze a real signal from an imported column, a worksheet expression, or pasted samples.

Paste signal values

Pasted values take precedence over the signal expression. Import a CSV/TSV to preserve pasted data in a worksheet.

A time column determines Δt. Use numeric elapsed times. Wavelets require uniform spacing; daily market observations can be analyzed in trading-sample units.

Signal preparation
Continuous transform · time–scale map
Discrete transform · bands and denoising

Probability studio

Plot range

Leave both bounds blank for a central 99.8% range. Discrete plots show at most 2,000 integer outcomes.

Use pdf(D,x) for continuous densities and pmf(D,k) for discrete masses. Interval probabilities include both endpoints. Quantile endpoints can be infinite. sample(D,n,seed) returns reproducible observations. Entropy uses natural logarithms (nats); continuous entropy is differential entropy.

Create graph

Use worksheet names and function calls, such as f(x), v(t)[0], or M(t)[0,1]. Data charts accept vectors or imported columns such as data_1_value. Use explicit * multiplication. Choose real(...), imag(...), or abs(...) for complex results.

Expression reference

Write one expression per row. Drag a row’s ⋮⋮ handle to change its order, or focus the handle and press Up/Down, Home, or End. The Theme selector switches between light and dark appearances. Definitions can be referenced anywhere in the worksheet. Use * for multiplication and radians for angles.

WaveletsOpen Wavelets to analyze an imported signal column or pasted real samples. Set sample spacing or select a time column, then analyze a CWT power map and DWT bands/denoising.
mexican_hat(x,2,0), morlet(x), haar(x)
wavelet_approx(data_1_value,2), wavelet_detail(data_1_value,2)
wavelet_denoise(data_1_value), wavelet_cwt(data_1_value,8)
ProbabilityD=normal(0,1), P=poisson(4), B=binomial(10,0.5)
Q=boltzmann([0,1,2],1)
pdf(D,x), pmf(P,2), cdf(D,1), prob(D,-1,1)
quantile(D,0.95), mean(D), variance(D), sample(D,100,42)
Open Probability for parameter controls, queries, and saved density/CDF graphs.
My graphsUse + Create graph for Cartesian, parametric, polar, 3D, implicit, surface, contour, scatter, line, bar, and histogram graphs. Edit named graphs below the toolbar; choose All 2D graphs or All 3D graphs to overlay them. Save worksheet includes graph definitions.
Document formulasExamples → Desmos document loads all 12 numbered expressions.
normaldist(0,1).pdf(x), D(x), ∫_0^1 ∫_0^y (x+y) dxdy, d/dx ∑_{n=1}^{3} f_0(x).
Real sum/product bounds include integer indices from ceil(lower) to floor(upper); an empty product is 1. This gives line 11 a stepwise extension.
The example uses log10 to match Desmos. Existing log/ln remain natural logs. Wavelet denominators can change sign or vanish; the initial interval avoids those singularities.
DatasetsUse Import data for CSV/TSV or pasted tables.
mean(data_1_value), std(data_1_value)
count(data_1_value), mean(dropna(data_1_value))
points(data_1_time, 2*data_1_value)
f(t)=interp(t,data_1_time,data_1_value)
Missing cells stay missing; lines preserve row order. Save worksheet includes imported values.
Calculus studiograd(x^2+y^2, [x,y], [1,2])
jacobian([x*y,sin(x)], [x,y], [1,2])
hessian(x^2+x*y+y^2, [x,y], [1,2])
divergence(F(x,y,z), [x,y,z]), curl(F(x,y,z), [x,y,z])
laplacian(f(x,y), [x,y])
mixed_diff(x*y, [x,y], [1,2])
directional(x*y, [x,y], [1,0], [1,2])
at(diff(x*y,x), [x,y], [1,2])
Use ∫ Calculus to select variables, preview a point result, or create a reusable function. Optional numerical controls set step size and integral tolerances.
Qubit mathematics|ψ⟩ = α|0⟩ + β|1⟩
|α|² + |β|² = 1
P(0) = |α|², P(1) = |β|²
ρ = |ψ⟩⟨ψ|, ⟨O⟩ = Tr(ρO)
Bloch coordinates: [⟨X⟩, ⟨Y⟩, ⟨Z⟩]
Dirac notation is executable: |ψ⟩=(|0⟩+i|1⟩)/sqrt(2). Use the Quantum / Dirac notation palette for insertion templates.
Ket / Dirac notation|0⟩, |1⟩, |01⟩ — basis columns (1–5 binary digits).
|ψ⟩=(|0⟩+i|1⟩)/sqrt(2)
|ψ(t)⟩=cos(t)|0⟩+sin(t)|1⟩
⟨ψ|ψ⟩ — conjugating inner product.
|ψ⟩⟨ψ| — outer product.
⟨ψ|pauliZ()|ψ⟩ — matrix element.
|0⟩|1⟩ or |0⟩ ⊗ |1⟩ — tensor product.
|+⟩, |-⟩, |+i⟩, |-i⟩ — normalized Pauli eigenstates.
ASCII |psi>, <psi|phi>, and |0><1| also work. Kets keep their amplitudes; use state(v) to normalize. A named ket wraps a column vector, not a scalar or density matrix.
Qubitsψ = qubit(1, i) — normalize two amplitudes
ψ = blochstate(θ, φ) — Bloch angles, radians
hadamard() @ ket0(), Rx(θ) @ ψ
density(ψ), probabilities(ψ), bloch(ψ), expect(pauliZ(), ψ)
evolve(ψ, pauliZ(), t) uses ℏ=1.
Registerstensor(ket0(), ket1()) — |01⟩
CNOT() @ tensor(hadamard() @ ket0(), ket0())
reduced(ψ, 0) — retain leftmost qubit
1–5 qubits; physical states must have norm 1 or a valid density matrix. Use state(v) to normalize a register.
Vector productsA @ v or A * v — matrix times vector
v @ A or v * A — vector times matrix
dot(u,v) / u @ v — no conjugation
inner(u,v) — conjugates u
outer(u,v), tensor(u,v)
col(v), row(v), bra(v)
u * v remains entrywise for two flat vectors. hadamard_product(A,B) is entrywise for matrices.
Derivativesdiff(sin(x), x) — derivative curve
diff(f(x), x, 2) — derivative at x=2
diff(f(x), x, x, 2) — second derivative
diff(f(x,y), y) — partial derivative
Optional fifth argument sets a positive finite difference step.
Integralsintegrate(x^2, x, 0, 1) — definite integral
integrate(sin(t), t, 0, x) — accumulated integral curve
integrate(f(x,y), x, 0, 1) — integrate over x, keep y free
Double integral: integrate(x+y,[x,y],[0,0],[y,1]), or ∫_0^1 ∫_0^y (x+y) dxdy.
List variables follow differential order, innermost first. Up to three variables; finite real bounds and complex outputs.
Functionsf(x, y) = x^2 + y^2
f(2, 3) evaluates a point; f(x, 0) draws a slice.
Use Surface for 3D output or Graph for level curves. Two inputs can be real, complex, or matrices when evaluated numerically.
Subscripts & powersf_1(x_1, x_2) = x_1^2 + x_2^2
f₁(x₁, x₂) = x₁² + x₂² is equivalent.
x_{1} names x_1; x^{n+1} means a power. Subscripts are names; A[0,1] still indexes a matrix.
Curvessin(x)
y = x^2 - 3
f(t) = exp(-t^2)
Variablesa = 2
Numeric constants get an adjustable slider.
Implicit & regionsx^2 + y^2 = 9
y < sin(x)
-2 < x < 2
MatricesA = [[2, 1], [1, 3]]
A @ A or A * A — matrix product
2 * A — scalar scaling
A^2 — matrix power
Linear algebradet(A), inv(A), T(A), rank(A), trace(A), eigvals(A), pinv(A), norm(A)
solve(A, [1, 2]), eye(3)
Matrix functionsexpm(A) — matrix exponential
logm(A) — matrix logarithm
exp(A) — entrywise exponential
Elements & complexA[0, 1] — zero-based index
i, real(A), imag(A), conj(A)
Greek symbolsAll 24 lowercase and uppercase letters work in names: α = 2, ψ(θ) = exp(i*θ), Α = [[1,i],[-i,2]].
π and pi are reserved constants. Uppercase Π is available as a name. Common glyph variants are aliases; final ς aliases σ. Greek ι is a variable, distinct from imaginary i.
Complex arithmeticz = 2 + 3i, j, sqrt(-1), log(-1)
abs(z), arg(z), polar(2, pi/3), cis(pi), roots(z, 3)
Angles are radians; roots and logs use principal branches. Phase at zero is undefined.
Complex matricesH(A) — conjugate transpose
inner([1,i], [1,i]) — conjugates first vector
sqrtm(A), ishermitian(A), isunitary(A)
Complex functionsf(t) = exp(i*t) — real/imaginary graphs and a complex trajectory
f(z) = z^2 — choose Domain map to explore complex inputs
Math functionssin cos tan asin acos atan sinh cosh sqrt abs exp log ln log10 floor ceil sign
where(x > 0, x, -x), min(x, 2), max(x, 0)

Heatmaps offer real, imaginary, magnitude, and phase components. Complex plane plots scalars, vector entries, and complex trajectories over the selected real parameter interval. Domain map evaluates one-argument functions at complex inputs; choose magnitude or phase. Transform applies a real 2×2 matrix to a square grid and unit circle. Graphs are sampled numerically, so very small features and singularities may need a closer zoom.

Worksheets autosave in this browser. Save downloads a portable JSON file. This is an independent calculator, with a focused feature set; it is not affiliated with Desmos.

Edit matrix

Cells accept expressions such as 1/2, sin(a), or -0.2.

Create or edit a function

Calculus variable and integral bounds

Set the variable and bounds, then choose Integrate formula. The integration variable may be a dummy variable outside the function argument list.

Return a scalar, [a, b] vector, or [[a, b], [c, d]] matrix; entries may depend on any argument. Multiply with @, or scale with *. Plots use zero-based entry indices. Use any number of distinct arguments. Choose plot inputs and fixed values below the equation. Use ∫_{0}^{x} (f(t)) dt or d/dx(f(x)) inside a formula. A bare integral ∫ (f(x)) dx is anchored at zero. For powers of an expression, write ^(n+1). Greek names and Unicode x₁, x² notation are supported.

Calculus studio

Numerical controls

Error estimates compare numerical approximations. Smaller steps can amplify rounding error. Integral bounds must be finite and real.

Numerical calculus, including complex values. Coordinate derivatives use real-direction perturbations. Matrix and vector outputs retain their algebraic shape. Non-finite or flagged derivatives appear as gaps or errors.

Create a qubit

|ψ⟩ = α|0⟩ + β|1⟩, with |α|² + |β|² = 1. Amplitudes are normalized automatically; both cannot be zero. Angle mode adds two slider variables to your worksheet.

Greek symbols

Type a Greek keyword such as alpha, theta, or omega to insert its lowercase symbol automatically after a delimiter, paste, or leaving the field. English keywords are case-insensitive; typed Greek symbols keep their case. Click a letter to insert it at the cursor. Letters are case-sensitive. π is the constant; Π is available as a variable.

Common variants

Variants use the same variable as the canonical letter shown. Σ and Π are names here, not summation or product operators.

Linear algebra studio

Real or complex matrices up to 32×32. Decompositions are numerical; residuals help check reconstruction. Use a scalar call such as M(1) to analyze a matrix-valued function at a point.

Import a dataset

Import up to 10,000 rows, 32 columns, and 50,000 cells (1 MB file). Or paste a table below. Text/date columns are shown in the preview but cannot be imported as numeric columns.

Random matrices & vectors

Seeds make results repeatable across graphs and parallel calculations. Change the seed for a new realization.

Python cells support numeric assignments, def, return, if/else, and for loops with range (up to 32 iterations). Mathematical numpy/math aliases are supported. Files, network access, arbitrary imports and general Python execution are unavailable. Maximum 1200 characters per cell.

Vector fields & force

Define F(r) with a position vector, or F(x,y) with separate coordinates. Vector indices start at zero.


Spatial calculus at a point

Use the function name above. For force from a potential, select a scalar potential such as U(r)=(r[0]^2+r[1]^2)/2.

Directions are used as entered, without normalization. Work needs a differentiable path, for example r(t)=[cos(t),sin(t)]. Derivatives are numerical.


Energy models · Boltzmann machines

Build a binary model, inspect its energy and probabilities, train on patterns, and generate new samples. Units take values 0 or 1.

Edit weights and biases (JSON arrays)

RBM W has visible × hidden shape. Fully visible BM W must be symmetric with zero diagonal. Choose Initialize after changing unit counts.


Train on patterns

Training runs in the background. RBMs use CD-k; fully visible BMs use exact model expectations. The seeded validation split is excluded from parameter updates. Reconstruction error alone does not establish model quality.

Generated patterns

Samples use Gibbs sampling; finite burn-in does not guarantee equilibrium or independent draws.


Model parameters, training history, and studio inputs are saved with the worksheet. Exact visible probabilities support at most 12 visible units; RBM training and sampling support up to 16 visible and 16 hidden units. This studio currently supports binary units.

Save worksheet

The .json extension is added automatically.

Trajectories & animation

Generation settings are saved with the worksheet. Export paths as a dataset to preserve the generated values. HTML animations are self-contained and play offline. GBM uses constant drift and volatility; set the horizon in the same units as your parameters. Sequential updates run in order and are not automatically normalized or stabilized.