Conor
Scheidt
← writing

Tensor trains vs. Monte Carlo

October 23, 2026 · 23 min read

The price of a European option on a basket of dd assets is an expectation over dd correlated random variables. Monte Carlo is indifferent to dd but converges as N−1/2N^{-1/2}, so each additional digit costs a hundred times the samples. This note instead approximates the integrand by a tensor train, a product of small matrices with one factor per variable, and integrates the approximation exactly1. We compare it with Monte Carlo and randomized quasi-Monte Carlo on baskets of 5, 10 and 20 assets, charging the train for every evaluation spent building it.

At five assets the train reaches a relative error of 10−610^{-6} with about a hundredth of the evaluations quasi-Monte Carlo needs; at ten and twenty, quasi-Monte Carlo is cheaper at every accuracy both reached. The rank of the train, which grows with the number of assets under every correlation structure we tried, explains both.

The integral

Let S1,…,SdS_1,\dots,S_d follow correlated geometric Brownian motions under the risk-neutral measure Q\mathbb Q,

Si(T)=Si(0)exp⁡ ⁣((r−12σi2)T+σiT Yi),Y∼N(0,R),S_i(T) = S_i(0)\exp\!\Big(\big(r-\tfrac12\sigma_i^2\big)T + \sigma_i\sqrt T\,Y_i\Big),\qquad Y\sim\mathcal N(0,R),

with risk-free rate rr, maturity TT, volatilities σi\sigma_i and correlation matrix RR. With weights wiw_i and x+=max⁡(x,0)x^+=\max(x,0), a call on the basket ∑iwiSi(T)\sum_i w_iS_i(T) with strike KK is worth

V0=e−rT EQ[(∑i=1dwiSi(T)−K)+].V_0 = e^{-rT}\,\mathbb E^{\mathbb Q}\Big[\big(\textstyle\sum_{i=1}^d w_i S_i(T) - K\big)^{+}\Big].

Writing Y=AzY = Az for any AA with AA⊤=RAA^{\top}=R, where zz is standard normal in Rd\mathbb R^d, gives

V0=∫Rdf(z) φd(z) dz,V_0 = \int_{\mathbb R^d} f(z)\,\varphi_d(z)\,dz,

where φd(z)=∏kφ(zk)\varphi_d(z)=\prod_k\varphi(z_k) is the standard normal density and ff the discounted payoff as a function of zz. The choice of AA leaves the price unchanged but orders the variables, which matters to quasi-Monte Carlo and to the train. We take A=VΛ1/2A = V\Lambda^{1/2} from R=VΛV⊤R = V\Lambda V^{\top}, eigenvalues decreasing, so that z1z_1 is the first principal component, for an equity basket the market factor.

The test problem is an equally weighted at-the-money call with Si(0)=K=100S_i(0)=K=100, T=1T=1 and r=3%r=3\%, volatilities evenly spaced from 15% to 40%, and correlation 0.6 within each of three sectors and 0.3 across, slightly perturbed. The reference prices are 9.04975, 8.72947 and 8.55218 for d=5d=5, 10 and 20, each with a relative standard error below 3×10−73\times10^{-7}.

A quadrature rule replaces ∫g(x) φ(x) dx\int g(x)\,\varphi(x)\,dx by ∑iqi g(xi)\sum_i q_i\,g(x_i), with nn nodes xix_i and weights qiq_i. Applied along every axis it approximates V0V_0 by a sum over ndn^d grid points,

∑i1,…,idqi1⋯qid f(xi1,…,xid).\sum_{i_1,\dots,i_d} q_{i_1}\cdots q_{i_d}\,f(x_{i_1},\dots,x_{i_d}).

Monte Carlo

Monte Carlo replaces the grid with independent draws Zn∼N(0,Id)Z_n\sim\mathcal N(0,I_d),

V^N=1N∑n=1Nf(Zn),sd⁡(V^N)=σfN.\htmlClass{vbind vbind-mc-est}{\hat V_N} = \frac1N\sum_{n=1}^{N} f(Z_n),\qquad \operatorname{sd}\big(\hat V_N\big) = \htmlClass{vbind vbind-mc-half}{\frac{\sigma_f}{\sqrt N}}.

The dimension enters only through σf\sigma_f, the standard deviation of the payoff, 1.49 times the price for ten assets. Figure i runs the estimator seven times on independent seeds, and their spread at each NN shows that standard deviation.

fig. i — plain Monte Carlo on the ten-asset basket, computed live: the running estimate with its 95% band, six more runs in faint ink, and the envelope ±1.96σ/√N around the reference price.

At N=\htmlClass{vbind vbind-mc-n}{N}= 262,144 the estimate is 8.701 with a 95% half-width of 0.050, and 6 of the seven runs lie inside the envelope. A relative standard error of 10−610^{-6} would take 2.2×10122.2\times10^{12} samples, two days on an Apple M4.

Randomized quasi-Monte Carlo draws from a scrambled Sobol sequence, which fills the unit cube more evenly, and estimates its error from independent scramblings, each unbiased. It does best on smooth integrands of low effective dimension; on the smoothed integrands used later its error falls roughly as 1/N1/N, which makes it the stronger baseline.

Low rank in two dimensions

Take first the two-asset integrand, payoff times correlated normal density, on a grid as a 64×6464\times64 matrix FF. Its singular value decomposition

F=∑α=164σα uαvα⊤,F = \sum_{\alpha=1}^{64}\sigma_\alpha\,u_\alpha v_\alpha^{\top},

with singular values σ1≥σ2≥⋯≥0\sigma_1\ge\sigma_2\ge\dots\ge0 and orthonormal vectors uαu_\alpha, vαv_\alpha, gives the best rank-rr approximation in the Frobenius norm when cut off after rr terms. The singular values fall quickly and then slowly (figure ii), because of the kink where the basket crosses the strike.

fig. ii — the two-asset integrand F, its rank-r truncation, and the singular values of F relative to the largest, on a log scale. Drag r along the spectrum.

With r=\htmlClass{vbind vbind-svd-r}{r}= 3 terms the approximation stores 387 numbers instead of 4,096, with relative Frobenius error 4.1×10−2. Low rank also makes weighted sums cheap:

∑i,jqiqjFij≈∑α=1rσα(∑iqiuiα)(∑jqjvjα),\sum_{i,j} q_i q_j F_{ij} \approx \htmlClass{vbind vbind-svd-ierr}{\sum_{\alpha=1}^{r}\sigma_\alpha\Big(\sum_i q_i u_{i\alpha}\Big)\Big(\sum_j q_j v_{j\alpha}\Big)},

so a two-dimensional quadrature becomes rr pairs of one-dimensional ones. With the density inside FF the weights are equal; the two sides differ by a relative 5.0×10−4, an error that need not fall monotonically with rr.

The tensor-train format

A tensor train approximates a function on a product grid by a product of matrices, one per variable2,

f(x1,…,xd)≈G1(x1) G2(x2) ⋯ Gd(xd),Gk(xk)∈Rrk−1×rk,r0=rd=1.\htmlClass{vbind vbind-format-value}{f(x_1,\dots,x_d)}\approx \htmlClass{vbind vbind-format-g1}{G_1(x_1)}\,\htmlClass{vbind vbind-format-g2}{G_2(x_2)}\,\htmlClass{vbind vbind-format-mid}{\cdots}\,\htmlClass{vbind vbind-format-g9}{G_d(x_d)},\qquad \htmlClass{vbind vbind-format-slice}{G_k(x_k)\in\mathbb R^{r_{k-1}\times r_k}},\quad r_0=r_d=1.

Each core GkG_k is an rk−1×n×rkr_{k-1}\times n\times r_k array holding a matrix for each of the nn grid values of xkx_k. Evaluating ff at a grid point multiplies one matrix from each core, passing a row vector of length rkr_k from core kk to core k+1k+1 until a number remains, at a cost of O(dr2)O(dr^2) with r=max⁡krkr=\max_k r_k. The train stores O(dnr2)O(dnr^2) numbers instead of ndn^d, and the rkr_k are its TT ranks.

The ten-asset train below has nine cores, for z2,…,z10z_2,\dots,z_{10}, because z1z_1 is integrated out analytically (see the section on the kink). With ten grid points per core and ranks at most eight, it stores 4,640 numbers in place of 10910^9.

fig. iii — the ten-asset train at one grid point, x₁, …, x₉ standing for z₂, …, z₁₀: each core's matrix at the chosen node, and below, the row vector after each product, ending in the train's value over the exact one. Blocks are shaded by their own largest entry; open squares are negative. Drag a lane to move its node.

At the point of figure iii the train returns 8.481 after 464 multiply–adds, against 8.481 for the smoothed integrand itself, a relative error of 5.3×10−5. Drag any one lane and the error stays below 0.3%; drag several to the outermost nodes and the train breaks down, even to negative values.

What the rank measures

The ranks a train needs depend on ff and on the accuracy required. Arrange the grid values of ff into the matrix F⟨k⟩F^{\langle k\rangle}, the kk-th unfolding, with rows indexed by (x1,…,xk)(x_1,\dots,x_k) and columns by (xk+1,…,xd)(x_{k+1},\dots,x_d). Then ff has an exact tensor train with rk=rank⁡F⟨k⟩r_k=\operatorname{rank}F^{\langle k\rangle} and none with smaller ranks2: rkr_k is the number of values the first kk variables must pass on for the rest to finish evaluating ff.

A sum g1(x1)+⋯+gd(xd)g_1(x_1)+\dots+g_d(x_d) has rank 2 at every cut, since the left half need pass on only its running total and the constant 1:

[g11][10g21]⋯[10gd−11][1gd].\begin{bmatrix} g_1 & 1\end{bmatrix}\begin{bmatrix}1 & 0\\ g_2 & 1\end{bmatrix}\cdots\begin{bmatrix}1 & 0\\ g_{d-1} & 1\end{bmatrix}\begin{bmatrix}1\\ g_d\end{bmatrix}.

The program below checks this for a basket of independent assets, gk=wkSkg_k=w_kS_k, then computes the rank of one unfolding for the basket value ss and for the call payoff (s−100)+(s-100)^+.

tsvim

A basket payoff depends on the first kk assets only through the partial sum sk=∑i≤kwiSis_k=\sum_{i\le k}w_iS_i. For independent assets, rounding sks_k to mm levels makes evaluating ff a dynamic program with rank at most mm at every cut. In the program each half of the grid has 36 distinct partial sums, and the call needs 30 of the 36 ranks they allow. Without the kink a few levels suffice; with correlation every asset depends on several coordinates, and more must cross each cut.

Figure iv draws, at each cut of the smoothed ten-asset integrand, the relative error of the best rank-rr approximation of F⟨k⟩F^{\langle \htmlClass{vbind vbind-cut-k}{k}\rangle}, (∑α>rσα2)1/2/(∑ασα2)1/2\htmlClass{vbind vbind-cut-rank}{\big(\sum_{\alpha>r}\sigma_\alpha^2\big)^{1/2}\big/\big(\sum_{\alpha}\sigma_\alpha^2\big)^{1/2}}.

fig. iv — the ten-asset integrand as a train, each bond labeled with the rank its cut needs for 10⁻⁴; below, the error of the best rank-r approximation at the chosen cut, singular values dotted. Choose smoothed or raw, and drag the cut.

At cut 4 the unfolding needs rank 14 for a relative Frobenius error of 10−410^{-4}; the ranks peak in the middle, where the cut divides the variables most evenly. This criterion is stricter than pricing requires.

Integration by contraction

On each axis we use the nn-point Gauss–Hermite rule, for which ∑iqi p(xi)=∫p(x) φ(x) dx\sum_i q_i\,p(x_i)=\int p(x)\,\varphi(x)\,dx for every polynomial pp of degree below 2n2n. For a tensor train the product-rule sum factorizes, and computing the right-hand side is called contracting the train:

∑i1,…,idqi1⋯qid G1(xi1)⋯Gd(xid)=(∑i1qi1G1(xi1))⋯(∑idqidGd(xid)).\sum_{i_1,\dots,i_d} q_{i_1}\cdots q_{i_d}\,G_1(x_{i_1})\cdots G_d(x_{i_d}) = \Big(\sum_{i_1} q_{i_1}G_1(x_{i_1})\Big)\cdots\Big(\sum_{i_d} q_{i_d}G_d(x_{i_d})\Big).

Each factor costs O(nr2)O(nr^2) and each product from the left O(r2)O(r^2), so the integral costs O(dnr2)O(dnr^2) instead of O(nd)O(n^d). The program below sums the 464^6 weighted entries of a random train with d=6d=6, n=4n=4 and ranks 3 one at a time, then contracts it, counting multiply–adds.

tsvim

Contracting the ten-asset train takes 5,104 multiply–adds. Its relative error of 2.2×10−52.2\times10^{-5} comes from the ten-point grid and the rank-8 approximation; the contraction adds only rounding error.

Construction by cross approximation

The textbook construction, TT-SVD, truncates SVDs of the unfoldings and so needs all ndn^d values; cross approximation does not. For a matrix AA of rank rr, any rr rows II and rr columns JJ whose intersection A[I,J]A[I,J] is nonsingular determine AA:

A=A[:,J]  A[I,J]−1  A[I,:].A = \htmlClass{vbind vbind-cross-evaluated}{A[:,J]}\;A[I,J]^{-1}\;\htmlClass{vbind vbind-cross-evaluated}{A[I,:]}.

If AA is only approximately of rank rr, an intersection of maximal volume3, the largest ∣det⁡∣|\det|, bounds the entrywise error by (r+1) σr+1(A)(r+1)\,\sigma_{r+1}(A), where σr+1(A)\sigma_{r+1}(A) is the spectral-norm error of the best rank-rr approximation. Figure v builds a cross greedily: each step requests a row, pivots on its largest residual and requests the column through the pivot, whose largest residual among unused rows picks the next row. No maximal-volume bound covers this partial pivoting.

fig. v — greedy cross approximation of F: the rows and columns evaluated so far, and the approximation they determine. Drag the number of steps.

After 3 steps it has evaluated 375 of the 4,096 entries for a relative error of 9.5×10−2, against 4.1×10−2 for the truncated SVD of the same rank, which needs every entry. Beyond five steps the greedy approximation stalls.

TT-cross applies the idea at every cut4, keeping rkr_k settings of (x1,…,xk)(x_1,\dots,x_k) and rkr_k of (xk+1,…,xd)(x_{k+1},\dots,x_d). At core kk it evaluates ff at every combination of a kept setting on the left, a grid value of xkx_k and a kept setting on the right, and picks the settings for the next cut with maxvol5, which finds a submatrix of locally maximal volume by row exchanges. A sweep along the train and back visits every core twice, so it costs twice the numbers the train stores. Exactly maximal volume at every step would keep the entrywise error within a factor of the best at the same ranks, a factor depending on rr and dd but not exponentially on dd6; maxvol finds only a local maximum, and on a black box cross approximation can miss features it never samples.

Each entry is first multiplied by ∏kqik\prod_k\sqrt{q_{i_k}}, so pivoting on large entries means pivoting on those that carry the integral, and contracting against q\sqrt q recovers it. As the weights on each axis sum to one, the Cauchy–Schwarz inequality bounds the error the train adds to the quadrature sum by the Frobenius error of the scaled train. The TT-cross listed in the appendix reaches a relative error of 6×10−96\times10^{-9} on the five-asset basket from 19,968 evaluations, 30% of its 16416^4-point grid.

The kink

The raw payoff (B(z)−K)+(B(z)-K)^+, with B(z)=∑iwiSi(z)B(z)=\sum_i w_iS_i(z), is continuous but not differentiable on the exercise boundary B(z)=KB(z)=K. Across this kink polynomial quadrature converges only as a power of the number of nodes instead of exponentially, and the singular values of the unfoldings decay slowly. Switched to raw, figure iv adds z1z_1 and a ninth cut, and every cut shared with the smoothed integrand needs a higher rank, the largest rising from 14 to 23; raw ranks of 22 and 23, just under the rank-24 cap of the plate’s trains, are lower bounds.

The remedy is to integrate the kink out analytically, a device known as pre-integration7 or conditional smoothing8. Write wiSi(T)=ci ebiz1w_iS_i(T)=c_i\,e^{b_iz_1}, where bi=σiT Ai1b_i=\sigma_i\sqrt T\,A_{i1} is the loading of asset ii on the market factor and cic_i depends on z2:d=(z2,…,zd)z_{2:d}=(z_2,\dots,z_d). Every loading is positive, so for fixed z2:dz_{2:d} the basket increases in z1z_1 and crosses KK at a single point z1⋆(z2:d)z_1^\star(z_{2:d}), found by Newton’s method. Each term is lognormal in z1z_1, and with Φ\Phi the standard normal distribution function, ∫t∞ebzφ(z) dz=eb2/2 Φ(b−t)\int_t^\infty e^{bz}\varphi(z)\,dz=e^{b^2/2}\,\Phi(b-t) gives a formula of Black–Scholes type, analytic in the remaining d−1d-1 variables and with the same integral:

E[f∣z2:d]=e−rT(∑i=1dci ebi2/2 Φ(bi−z1⋆)−K Φ(−z1⋆)),∑i=1dci ebiz1⋆=K.\htmlClass{vbind vbind-smooth-value}{\mathbb E\big[f\mid z_{2:d}\big]} = e^{-rT}\Big(\sum_{i=1}^{d} c_i\,e^{b_i^2/2}\,\Phi\big(b_i-z_1^\star\big) - K\,\Phi\big(-z_1^\star\big)\Big),\qquad \htmlClass{vbind vbind-smooth-boundary}{\sum_{i=1}^d c_i\,e^{b_iz_1^\star}=K}.
fig. vi — the ten-asset integrand on the plane z₃ = … = z₁₀ = 0 with its exercise boundary; below, the kinked slice at the chosen z₂, whose area is one point of the smoothed integrand E[f | z₂, …, z₁₀] φ(z₂) on the right. Drag z₂.

In figure vi, at z2=\htmlClass{vbind vbind-smooth-z2}{z_2}= 0.60, the boundary sits at z1⋆=\htmlClass{vbind vbind-smooth-boundary}{z_1^\star}= 0.07 and the conditional expectation is 7.29. On five assets the best raw train reached a relative error of 1.4×10−31.4\times10^{-3} from 1.9×1051.9\times10^{5} evaluations, and TT-cross on the smoothed integrand 6×10−96\times10^{-9} from a tenth as many. Monte Carlo and quasi-Monte Carlo get the same smoothed integrand, which for ten assets cuts the Monte Carlo standard deviation from 1.49 to 0.17 times the price, saving a factor of about 80 in samples and 16 in time.

Accuracy versus cost

Figure vii compares the errors of Monte Carlo (MC), randomized quasi-Monte Carlo (RQMC) and tensor trains (TT) on the three baskets, raw and smoothed, counting as cost every evaluation of the integrand, repeats included. Train errors are not monotone in rank, so the cheapest train to reach each error is picked with the reference in hand; in practice a second train or the control variate below would have to confirm it, at a cost left out here.

fig. vii — relative error against integrand evaluations, tensor-train construction included, for d = 5, 10 and 20; the shaded band lies below twice the reference's relative standard error. Drag d.

For d=\htmlClass{vbind vbind-cost-d}{d}= 5, a relative error of 10−410^{-4} costs the tensor train 1,824 evaluations against 3,700 for smoothed quasi-Monte Carlo, and 10−610^{-6} costs it 4,840 against 490,000. Monte Carlo on the smoothed integrand would need 6.9×1010 for 10−610^{-6}.

At five assets the train loses only at low accuracy, with seven times the evaluations of quasi-Monte Carlo at 10−310^{-3}. At ten it needs 55 times fewer than smoothed Monte Carlo at 10−410^{-4}, but quasi-Monte Carlo is cheaper than our trains at every accuracy both reached, thirteen times at 10−410^{-4} and three at 10−610^{-6}. At twenty the errors no longer fall with rank: from rank 2 to 40 they scatter between 6.5×10−66.5\times10^{-6} and 1.4×10−31.4\times10^{-3}, and the rank-40 train, built from 7×1067\times10^{6} evaluations, is less accurate than the rank-2 train built from 3,456. Quasi-Monte Carlo is cheaper than every train we built.

An independent implementation, teneva9, slows the same way: at rank 16 and d=20d=20 it needs 2.8 million evaluations for 9.4×10−59.4\times10^{-5}, where quasi-Monte Carlo needs 4,096 for 7.8×10−57.8\times10^{-5}. Wall-clock times, measured for every method in one Python process, give the same ordering at errors of 10−510^{-5} and below.

Why the rank grows

The eigenvalues of the correlation matrix explain the twenty-asset result (figure viii). For d=\htmlClass{vbind vbind-growth-d}{d}= 20, the market and two sector directions carry 65% of the variance, and the remaining 17 directions are of similar size. Each moves every asset, so each cut must carry information about many assets. The largest rank any cut needs for 10−410^{-4} grows with dd under all three correlation structures we tried: the sector blocks, a single factor with every pairwise correlation 0.5, and random positive loadings on d/2d/2 factors.

fig. viii — eigenvalues of the d-asset sector-block correlation matrix, and the largest rank any cut needs for 10⁻⁴ as d grows, for three correlation structures. Drag d.

The same spectrum suits quasi-Monte Carlo, whose effective dimension the three dominant directions keep small: its cost to reach 10−610^{-6} grew by less than a factor of two from ten to twenty assets. Known rank bounds cover Gaussian densities in correlated coordinates10; in principal-component coordinates the density has rank 1, so the ranks here come from the payoff, for which we know of no bound.

A tensor train therefore needs an integrand that is smooth, or can be made so, and dominated by a few interactions, with strongly coupled variables adjacent, and its construction must be repaid by high accuracy or by many integrals sharing one train. A single ten-asset price to 10−310^{-3} took smoothed quasi-Monte Carlo 256 evaluations, our smallest sample, and the cheapest train 4,608.

Tensor trains as control variates

A contraction returns a number with no error estimate, and TT-cross supplies none. The usual rule stops the iteration once the integral changes little from one sweep to the next; ours ran a fixed number of sweeps, and figure ix replays the twelve that built the ten-asset train.

fig. ix — the integral of the ten-asset train after each TT-cross sweep, against the evaluations spent, with the reference price, a ±10⁻⁴ relative band, and the chosen sweep's ranks. Drag the sweep.

After sweep 12 and 110,800 evaluations the train integrates to 8.72928, a relative error of 2.2×10−5, and its relative change from the previous sweep is 1.3×10−4. The ranks settle at sweep 3; each later sweep costs 9,280 evaluations, and the error moves between 1.3×10−61.3\times10^{-6} and 2.5×10−42.5\times10^{-4}. Drag the sweep and compare the dashed step from the previous sweep, all a stopping rule sees, with the solid drop to the reference: at sweep 6 the step is 3.7×10−63.7\times10^{-6} and the error 1.0×10−41.0\times10^{-4}.

As a control variate the train gets an error estimate from Monte Carlo, which then estimates only what the train got wrong. Let ff now be the smoothed integrand, fTTf_{TT} the train extended off the grid by polynomial interpolation through the Gauss–Hermite nodes, and ITTI_{TT} its integral, which the contraction computes exactly because the rule integrates that polynomial without error. Then

V^CV=ITT+1N∑n=1N[f(Zn)−fTT(Zn)]\hat V_{\mathrm{CV}} = I_{TT} + \frac1N\sum_{n=1}^{N}\big[f(Z_n)-f_{TT}(Z_n)\big]

is unbiased for any train, however crude. Its variance is Var⁡(f−fTT)/N\htmlClass{vbind vbind-cv-ratio}{\operatorname{Var}(f-f_{TT})}/N, small when the train is accurate, and the central limit theorem gives a confidence interval as for plain Monte Carlo.

fig. x — Monte Carlo on the smoothed ten-asset integrand, with and without the rank-8 train as a control variate, on the same scenarios, computed live.

After 32,768 samples the 95% intervals of figure x are 8.72948 ± 7.8×10−5 with the train and 8.71382 ± 0.01548 without it, against the reference 8.72947. At the estimated variance ratio of 39,408 the band with the train is too narrow to see. Over five trains of ranks 2 to 16, each the control variate for 4,096 samples, the variance fell by factors from 24 to 1.2×1061.2\times10^6, and all five 95% intervals contained the reference.

The program below shows the mechanism in one dimension, with Taylor polynomials of rising degree in place of the train. Every interval covers the exact value. The degree-8 control divides the variance by 4,190, and the degree-1 control increases it.

tsvim

A train used as the proposal in importance sampling or Metropolis–Hastings likewise costs efficiency when inaccurate and leaves the estimator correct. Such a train can be sampled exactly11 and kept nonnegative12, and a defensive mixture with the original density bounds the importance weights13 and makes an independence chain converge geometrically from any start14.

workrole of the tensor trainreported resultcaveat
Kastoryano and Pancotti15integrand in Fourier space, contractedcall-on-min options on up to 15 assetspreprint; compared with an unoptimized Monte Carlo
Glau, Kressner and Statti16price as a function of model parameters0.5 ms per Heston American-put price against 37 ms for the PDE solveroffline cost excluded; on 25-asset baskets it overtakes Monte Carlo only after 500 to 1,000 prices
Sakurai, Takahashi and Miyamoto17parametric Fourier pricingmicroseconds per price once builtthe build takes about 12.5 minutes at 11 assets
Bayer, Eigel, Sallandt and Trunschke18regression model inside Longstaff–SchwartzBermudan max-calls on up to 1,000 assetsMonte Carlo still does the integration
Cui, Dolgov and Scheichl19importance-sampling density for rare eventsprobabilities near 4×10−104\times10^{-10} in 18 dimensionscompared only with cross-entropy importance sampling
Nicholson and Gingrich20full distribution of a stochastic reaction network3×10153\times10^{15} states at rank 30chemical kinetics rather than finance

Two financial problems suited to these uses remain untested, credit-portfolio tail probabilities and default contagion21.

Reproducing

The experiments and a Python tensor-train toolkit are at github.com/conorscheidt/tensor-trains. In about ten minutes on an Apple M4, run_pricing.py regenerates every measured number here except the teneva comparison, which comes from crosscheck_teneva.py.

Appendix: a complete TT-cross

The program below is a one-site TT-cross, updating one core at a time, for the five-asset basket. It approximates the smoothed integrand, scaled by q\sqrt q, on a 16-point Gauss–Hermite grid in each of z2,…,z5z_2,\dots,z_5 and checks the result against the dense sum over all 65,536 points.

tsvim

The dense sum agrees with the reference within the reference’s standard error, so the 5.6×10−95.6\times10^{-9} of TT-cross is compression error. TT-cross requested 19,968 entries, 11,275 of them distinct, in about the dense sum’s time. Its count grows linearly in nn once nn reaches the rank: at n=32n=32 it needs 39,936 evaluations against 1,048,576 and runs over ten times faster, while at n=8n=8 its 6,656 exceed the 4,096 grid points.

Footnotes

  1. This note grew out of a fifteen-minute talk for the Northwestern University Fintech Club. ↩

  2. I. V. Oseledets, Tensor-train decomposition, SIAM Journal on Scientific Computing 33(5), 2011. ↩ ↩2

  3. S. A. Goreinov and E. E. Tyrtyshnikov, The maximal-volume concept in approximation by low-rank matrices, Contemporary Mathematics 280, 2001. ↩

  4. I. Oseledets and E. Tyrtyshnikov, TT-cross approximation for multidimensional arrays, Linear Algebra and its Applications 432(1), 2010. ↩

  5. S. A. Goreinov, I. V. Oseledets, D. V. Savostyanov, E. E. Tyrtyshnikov and N. L. Zamarashkin, How to find a good submatrix, in Matrix Methods: Theory, Algorithms and Applications, World Scientific, 2010. ↩

  6. D. V. Savostyanov, Quasioptimality of maximum-volume cross interpolation of tensors, Linear Algebra and its Applications 458, 2014. ↩

  7. M. Griebel, F. Y. Kuo and I. H. Sloan, The smoothing effect of integration in ℝᵈ and the ANOVA decomposition, Mathematics of Computation 82, 2013. ↩

  8. C. Bayer, M. Siebenmorgen and R. Tempone, Smoothing the payoff for efficient computation of basket option prices, Quantitative Finance 18(3), 2018. ↩

  9. A. Chertkov and collaborators, teneva, a NumPy library for the tensor-train format. ↩

  10. P. B. Rohrbach, S. Dolgov, L. Grasedyck and R. Scheichl, Rank bounds for approximating Gaussian densities in the tensor-train format, SIAM/ASA Journal on Uncertainty Quantification 10(3), 2022. ↩

  11. S. Dolgov, K. Anaya-Izquierdo, C. Fox and R. Scheichl, Approximation and sampling of multivariate probability distributions in the tensor train decomposition, Statistics and Computing 30, 2020. ↩

  12. T. Cui and S. Dolgov, Deep composition of tensor-trains using squared inverse Rosenblatt transports, Foundations of Computational Mathematics 22(6), 2022. ↩

  13. T. Hesterberg, Weighted average importance sampling and defensive mixture distributions, Technometrics 37(2), 1995. ↩

  14. K. L. Mengersen and R. L. Tweedie, Rates of convergence of the Hastings and Metropolis algorithms, Annals of Statistics 24(1), 1996. ↩

  15. M. Kastoryano and N. Pancotti, A highly efficient tensor network algorithm for multi-asset Fourier options pricing, 2022. ↩

  16. K. Glau, D. Kressner and F. Statti, Low-rank tensor approximation for Chebyshev interpolation in parametric option pricing, SIAM Journal on Financial Mathematics 11(3), 2020. ↩

  17. R. Sakurai, H. Takahashi and K. Miyamoto, Learning parameter dependence for Fourier-based option pricing with tensor trains, Mathematics 13(11), 2025. ↩

  18. C. Bayer, M. Eigel, L. Sallandt and P. Trunschke, Pricing high-dimensional Bermudan options with hierarchical tensor formats, SIAM Journal on Financial Mathematics 14(2), 2023. ↩

  19. T. Cui, S. Dolgov and R. Scheichl, Deep importance sampling using tensor trains with application to a priori and a posteriori rare events, SIAM Journal on Scientific Computing 46(1), 2024. ↩

  20. S. B. Nicholson and T. R. Gingrich, Quantifying rare events in stochastic reaction-diffusion dynamics using tensor networks, Physical Review X 13, 041006, 2023. ↩

  21. The ideal importance-sampling density for the tail probability of a credit portfolio has one mode for each way of breaching the loss threshold. A Gaussian mean shift captures one of them (P. Glasserman, W. Kang and P. Shahabuddin, Fast simulation of multifactor portfolio credit risk, Operations Research 56(5), 2008), and a train might capture all. Under default contagion the probabilities of the joint default states follow a master equation, like the reaction networks of Nicholson and Gingrich. ↩