@sschepis/resolang
Version:
ResoLang - Core quantum resonance computation library for browser and Node.js
83 lines (68 loc) • 2.79 kB
text/typescript
// ResoLang Math Utilities - Complex and Quaternion operations
import type { Complex, Quaternion, ResonanceValue } from './types.js';
// Complex number operations
export function createComplex(real: number, imag: number = 0): Complex {
return { real, imag };
}
export function complexMagnitude(c: Complex): number {
return Math.sqrt(c.real * c.real + c.imag * c.imag);
}
export function complexPhase(c: Complex): number {
return Math.atan2(c.imag, c.real);
}
// Quaternion operations
export function createQuaternion(
position: [number, number, number] = [0, 0, 0],
amplitude: Complex | number = 1,
gaussian: [number, number] = [0, 0],
eisenstein: [number, number] = [0, 0]
): Quaternion {
return {
position,
amplitude: typeof amplitude === 'number' ? createComplex(amplitude) : amplitude,
gaussian,
eisenstein,
};
}
// Resonance calculations
export function computeResonance(prime1: number, prime2: number, strength: number = 1.0): ResonanceValue {
const gcd = (a: number, b: number): number => (b === 0 ? a : gcd(b, a % b));
const lcm = (prime1 * prime2) / gcd(prime1, prime2);
const resonanceStrength = strength * (1 - 1 / Math.log(lcm + 1));
const phase = (2 * Math.PI * prime1) / prime2;
return {
strength: resonanceStrength,
primes: [prime1, prime2],
phase,
};
}
export function computeResonanceVector(state: Quaternion, eigen: Quaternion): number {
const magState = complexMagnitude(state.amplitude);
const magEigen = complexMagnitude(eigen.amplitude);
if (magState === 0 || magEigen === 0) return 0;
// Dot product of position vectors
const dotPos = state.position[0] * eigen.position[0] +
state.position[1] * eigen.position[1] +
state.position[2] * eigen.position[2];
// Cosine similarity of amplitudes (simplified phase alignment)
const phaseDiff = Math.abs(complexPhase(state.amplitude) - complexPhase(eigen.amplitude));
const alignment = Math.max(0, Math.cos(phaseDiff));
return (alignment + Math.abs(dotPos)) / 2;
}
export function computeEntropy(state: Quaternion): number {
const mag = complexMagnitude(state.amplitude);
const pos = Math.sqrt(
state.position[0] ** 2 + state.position[1] ** 2 + state.position[2] ** 2
);
return -Math.log(mag + 0.001) + pos * 0.1;
}
export function measureCoherence(state: Quaternion): number {
const mag = complexMagnitude(state.amplitude);
const phase = complexPhase(state.amplitude);
const gaussianMag = Math.sqrt(state.gaussian[0] ** 2 + state.gaussian[1] ** 2);
return Math.min(1, mag * (1 + Math.cos(phase)) * (1 - gaussianMag * 0.1));
}
export function computeEnergy(state: Quaternion): number {
const mag = complexMagnitude(state.amplitude);
return mag * mag;
}