For the complete documentation index, see llms.txt. This page is also available as Markdown.
Quantum linear system problems
Overview
The quantum linear system problem (QLSP) is a quantum variant of the linear system problem Ax=b. Given the access to an invertible matrix A and to a normalized quantum state ∣b⟩, QLSP asks a construction of the solution quantum state
∣x⟩:=A−1∣b⟩/∥A−1∣b⟩∥2
with bounded error.
Suppose the condition number of the coefficient matrix is κ:=∥A∥2/∥A−1∥2 and A∈CN×N. The recent progress reveals some near-optimal quantum algorithms for solving QLSP with bounded error ϵ and complexity O~(κlog(1/ϵ)polylog(N)). In this example, we will deploy a much simpler (but sacrificing the total complexity) construction of the solution to QLSP.
The equivalent problem in function approximation
The immediate idea for solving QLSP is approximately implementing the map A↦A−1. Hence, in light of QSP, the implementation boils down to a scalar function f(x)=x−1. Without loss of generality, we assume the matrix is normalized so that ∥A∥2≤1. Then, the condition number implies that the eigenvalues of A lie in the interval Dκ:=[−1,−κ]∪[κ,1]. Hence, we have to find an odd polynomial approximation to f(x) on the interval Dκ. Here, the interval is set to Dκ rather than [−1,1] to exclude the singularity of f(x) at x=0.
Approximating the matrix inversion within the interval of condition number.
Setup parameters
For numerical demonstration, we set κ=10 and scale down the target function by a factor of 1/(2κ)=1/20 so that
f(x)=2κx1,x∈Dκmax∣f(x)∣=21.
This improves the numerical stability.
Polynomial approximation using convex-optimization-based method
To numerically find the best polynomial approximating f(x) on the interval Dκ, we use a subroutine which solves the problem using convex optimization. We first set the parameters of the subroutine.
Then, simply calling the subroutine yields the coefficients of the approximation polynomial in the Chebyshev basis. As a remark, the solver outputs all coefficients while we have to post-select those of odd order due to the parity constraint.
To visualize this polynomial approximation, we plot it with the target function. From the figure, we can find both agree very well on Dκ but have distinct regularity otherwise.
visualize polynomial approximation
Left: The odd polynomial approximation to the target function solved using the convex-optimization-based method. Right: The point-wise approximation error.
Solving the phase factors for QLSP
We use Newton's method for solving phase factors. The parameters of the solver is initiated as follows.
Verifying the solution
We verify the solved phase factors by computing the residual error in terms of the ℓ∞ norm
Using 1,000 equally spaced points, the residual error is 6.2172×10−15 which attains almost machine precision. We also plot the point-wise error.
The point-wise error of the solved phase factors.
Reference
Gilyén, A., Su, Y., Low, G. H., & Wiebe, N. (2019, June). Quantum singular value transformation and beyond: exponential improvements for quantum matrix arithmetics. In Proceedings of the 51st Annual ACM SIGACT Symposium on Theory of Computing (pp. 193-204).
Dong, Y., Meng, X., Whaley, K. B., & Lin, L. (2021). Efficient phase-factor evaluation in quantum signal processing. Physical Review A, 103(4), 042419.
kappa = 10;
targ = @(x) (1/(2*kappa))./x;
% approximate f(x) by a polynomial of degree deg
deg = 151;
parity = mod(deg, 2);
% set the parameters of the solver
opts.intervals=[1/kappa,1];
opts.objnorm = Inf;
opts.epsil = 0.2;
opts.npts = 500;
opts.fscale = 1; % disable further rescaling of f(x)ab
% convert the Chebyshev coefficients to Chebyshev polynomial
func = @(x) ChebyCoef2Func(x, coef, parity, true);
figure()
tiledlayout(1,2)
nexttile
hold on
xlist1 = linspace(0.5/kappa,1,500)';
targ_value1 = targ(xlist1);
plot(xlist1,targ_value1,'b-')
plot(-xlist1,-targ_value1,'b-')
xlist1 = linspace(-1,1,1000)';
func_value1 = func(xlist1);
plot(xlist1,func_value1,'-')
hold off
xlabel('$x$', 'Interpreter', 'latex')
ylabel('$f(x)$', 'Interpreter', 'latex')
legend('target function', '', 'polynomial approximation')
nexttile
plot(xlist,func_value-targ_value)
xlabel('$x$', 'Interpreter', 'latex')
ylabel('$f_\mathrm{poly}(x)-f(x)$', 'Interpreter', 'latex')
print(gcf,'quantum_linear_system_problem_polynomial.png','-dpng','-r500');
% set the parameters of the solver
opts.maxiter = 100;
opts.criteria = 1e-12;
% use the real representation to speed up the computation
opts.useReal = true;
opts.targetPre = true;
opts.method = 'Newton';
% solve phase factors
[phi_proc,out] = QSP_solver(coef,parity,opts);