ts-quantum
Version:
TypeScript library for quantum mechanics calculations and utilities
109 lines • 4.33 kB
JavaScript
;
/**
* Creation and annihilation operators for quantum harmonic oscillators
*/
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.harmonicOscillator = exports.momentumOp = exports.positionOp = exports.numberOp = exports.destructionOp = exports.creationOp = void 0;
const operator_1 = require("../operators/operator");
const math = __importStar(require("mathjs"));
/**
* Creates creation operator a† for dimension N
* Matrix elements: ⟨n|a†|m⟩ = √(m+1)δ(n,m+1)
*/
function creationOp(dimension) {
const matrix = Array(dimension).fill(null)
.map(() => Array(dimension).fill(null)
.map(() => math.complex(0, 0)));
// Fill matrix elements
for (let m = 0; m < dimension - 1; m++) {
matrix[m + 1][m] = math.complex(Math.sqrt(m + 1), 0);
}
return new operator_1.MatrixOperator(matrix);
}
exports.creationOp = creationOp;
/**
* Creates annihilation operator a for dimension N
* Matrix elements: ⟨n|a|m⟩ = √m δ(n,m-1)
*/
function destructionOp(dimension) {
const matrix = Array(dimension).fill(null)
.map(() => Array(dimension).fill(null)
.map(() => math.complex(0, 0)));
// Fill matrix elements
for (let m = 1; m < dimension; m++) {
matrix[m - 1][m] = math.complex(Math.sqrt(m), 0);
}
return new operator_1.MatrixOperator(matrix);
}
exports.destructionOp = destructionOp;
/**
* Creates number operator n = a†a for dimension N
*/
function numberOp(dimension) {
// Create diagonal matrix for number operator
const matrix = Array(dimension).fill(null)
.map((_, i) => Array(dimension).fill(null)
.map((_, j) => i === j ? math.complex(i, 0) : math.complex(0, 0)));
// Explicitly mark as hermitian since it's diagonal with real entries
return new operator_1.MatrixOperator(matrix, 'hermitian');
}
exports.numberOp = numberOp;
/**
* Creates position operator x = (a + a†)/√2 for dimension N
*/
function positionOp(dimension) {
const aOp = destructionOp(dimension);
const aUpOp = creationOp(dimension);
// Scale operator after addition to maintain hermiticity
const sumOp = aOp.add(aUpOp);
const finalOp = sumOp.scale(math.complex(1 / Math.sqrt(2), 0));
return new operator_1.MatrixOperator(finalOp.toMatrix(), 'hermitian');
}
exports.positionOp = positionOp;
/**
* Creates momentum operator p = i(a† - a)/√2 for dimension N
*/
function momentumOp(dimension) {
const aOp = destructionOp(dimension);
const aUpOp = creationOp(dimension);
// i(a† - a)/√2
const diffOp = aUpOp.add(aOp.scale(math.complex(-1, 0)));
const finalOp = diffOp.scale(math.complex(0, 1 / Math.sqrt(2)));
return new operator_1.MatrixOperator(finalOp.toMatrix(), 'hermitian');
}
exports.momentumOp = momentumOp;
/**
* Creates harmonic oscillator Hamiltonian H = ℏω(a†a + 1/2)
* For simplicity, we set ℏω = 1
*/
function harmonicOscillator(dimension) {
const n = numberOp(dimension);
const halfId = operator_1.MatrixOperator.identity(dimension).scale(math.complex(0.5, 0));
const hamiltonian = n.add(halfId);
return new operator_1.MatrixOperator(hamiltonian.toMatrix(), 'hermitian');
}
exports.harmonicOscillator = harmonicOscillator;
//# sourceMappingURL=oscillator.js.map