Code Monkey home page Code Monkey logo

quantumcircuitlab's Introduction

QuantumCircuitLAB - A quantum computing MATLAB Package

QuantumCircuitLAB is a basic quantum computing package written in MATLAB. It is basic in the sense that it does not have advanced features such as noisy gates or built-in quantum algorithm examples. The user is encouraged to build those advanced features on top of the existing basic framework by themselves. The user is expected to be well-read in linear algebra and quantum information theory.

Advantage of this package is that the user would be able to leverage the computational speed of MATLAB compared to using other languages such as Python. In my own experience, I've found that the speed of doing similar computations in Python (even with Numba) is way too slow.

Warning: The package does not automatically check if you have enough RAM, so don't try to initialise a density matrix that has size ~100 qubits. It will most likely freeze your PC. :)

How to use this package?

Download the +QuantumCircuitLAB folder and put it in your current working directory of your MATLAB.

Then, to make sure that you don't have to type the namespace QuantumCircuitLAB.somefunction, you can import all the functions in the package by placing this line of code at the top of your MATLAB script:

import QuantumCircuitLAB.*

% Your code...

The examples shown below assumes that you have performed the above importing line.

Functions and their usage

The functions that are provided by this package are as listed below (in no particular order):

  • ket
    • Example #1
      % Initialise statevector |000⟩.
      a = ket(0,0,0);
    • Example #2
      % Initialise statevector |0+-⟩.
      a = ket(0,'+','-');
  • bra
    • Example #1
      % Initialise statevector ⟨000|.
      a = bra(0,0,0);
    • Example #2
      % Initialise statevector ⟨0+-|.
      a = bra(0,'+','-');
  • quantumcircuit - Initialise (|0⟩⟨0|)^(⊗n).
    • Example
      % Initialise density matrix of state (|0⟩⟨0|)^(⊗n) where n is the number of qubits.
      n = 5;
      a = quantumcircuit(n);
  • densitymatrix - Initialise arbitrary density matrix.
    • Example
      % Initialise density matrix of state |010+-⟩⟨010+-|.
      a = densitymatrix(0,1,0,'+','-');
  • depolarisingchannel - (see equation (8) in 10.1103/PhysRevX.10.021071).
    • Example
      % Applying depolarisingchannel on a single qubit of a multi-qubit system.
      qubits = [1 2 3]; % qubits' indices.
      error = 0.5; % 0 <= error <= 1.
      a = densitymatrix(0,0,0);
      b = depolarisingchannel(a,qubits(1),error); % apply depolarisingchannel on the 1st qubit.
  • resetchannel - Resets target qubit back to state |0⟩.
    • Example
      % Applying resetchannel on a single qubit of a multi-qubit system.
      qubits = [1 2]; % qubits' indices.
      a = densitymatrix(1,'+'); % state |1+⟩⟨1+|.
      b = resetchannel(a,qubits(2)); % apply resetchannel on the 2nd qubit. b is now |10⟩⟨10|.
  • fidelity
    • Example
      % Compute the fidelity given two arbitrary density matrices.
      qubits = [1 2]; % qubits' indices.
      a = densitymatrix(1,'+'); % state |1+⟩⟨1+|.
      b = depolarisingchannel(a,qubits(1),0.01);
      f = fidelity(a,b); % compute the fidelity of a against b.
  • partialtr - Partial trace.
    • Example
      % Take partial trace of a over some qubit(s).
      qubits = [1 2 3]; % qubits' indices.
      a = densitymatrix(1,1,0); % state |1+⟩⟨1+|.
      b = partialtr(a,[qubits(1) qubits(3)]); % apply partial trace over qubits 1 and 3. Resulting density matrix is of dimension 2×2 since two qubits have been thrown away.
  • diracnotation
    • Example

      % Using diracnotation to display the density matrix.
      a = densitymatrix(1,1,0); % state |110⟩⟨110|.
      a_string = diracnotation(a);
      disp(a_string);

      Output: (1)|110⟩⟨110|

  • X - Single-qubit Pauli X gate.
    • Example
      % Apply single-qubit X gate on multiple qubits at once.
      qubits = [1 2 3]; % qubits' indices.
      a = densitymatrix(1,1,0); % state |110⟩⟨110|.
      b = X(a,[qubits(1) qubits(3)]); % state |011⟩⟨011|.
  • Y - Single-qubit Pauli Y gate.
    • Example

      Similar to X.

  • Z - Single-qubit Pauli Z gate.
    • Example

      Similar to X.

  • H - Single-qubit Hadamard gate.
    • Example

      Similar to X.

  • CX - Two-qubit controlled-NOT gate.
    • Example
      % Using controlled-NOT gate.
      qubits = [1 2 3]; % qubits' indices.
      a = densitymatrix(1,1,0); % state |110⟩⟨110|.
      b = CX(a,qubits(1),qubits(3)); % state |111⟩⟨111|.
      c = CX(a,qubits(3),qubits(1)); % state |110⟩⟨110|.
  • CY - Two-qubit controlled-Y gate.
    • Example

      Similar to CX.

  • CZ - Two-qubit controlled-Phase gate.
    • Example

      Similar to CX.

  • SWAP - Two-qubit Swap gate.
    • Example
      % Using diracnotation to display the density matrix.
      qubits = [1 2 3]; % qubits' indices.
      a = densitymatrix(1,1,0); % state |110⟩⟨110|.
      b = SWAP(a,[qubits(1) qubits(3)]); % swaps qubits 1 and 3.

quantumcircuitlab's People

Contributors

bernwo avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.