Skip to content

@sciexpr/physics

物理专用包 — 物理常量库、SI 单位制与换算、向量运算、Bra-Ket 量子力学记号。

安装

bash
npm install @sciexpr/physics

物理常量库

基于 CODATA 2018 推荐值,涵盖基本常量、电磁学、原子物理、热力学四类。

typescript
import {
  FUNDAMENTAL_CONSTANTS, EM_CONSTANTS, ATOMIC_CONSTANTS, THERMO_CONSTANTS,
  ALL_CONSTANTS,
  getConstant, getConstantsByCategory, searchConstants,
} from '@sciexpr/physics'

// 全部常量
ALL_CONSTANTS.length  // 30+

// 按符号查询
getConstant('c')
// → { symbol:'c', name:'真空中光速', value:299792458, unit:'m·s⁻¹', ... }

// 按分类获取
getConstantsByCategory('electromagnetic')
// → [{ symbol:'e', name:'基本电荷', ... }, { symbol:'ε₀', name:'真空介电常数', ... }, ...]

// 搜索
searchConstants('Planck')
// → [{ symbol:'h', name:'普朗克常数', ... }, { symbol:'ħ', name:'约化普朗克常数', ... }]

PhysicalConstant 结构

typescript
interface PhysicalConstant {
  symbol: string            // 'c', 'h', 'G'
  name: string              // 中文名
  nameEN: string            // 英文名
  value: number             // 数值
  uncertainty?: number      // 不确定性
  unit: string              // 单位
  category: 'fundamental' | 'electromagnetic' | 'atomic' | 'thermodynamic'
  description?: string      // 描述
  latex: string             // LaTeX 表示
}
分类条目数示例
fundamental基本常量c, h, ħ, G, g, R, Nₐ, k_B
electromagnetic电磁学e, ε₀, μ₀, α, Φ₀, G₀, Z₀
atomic原子物理mₑ, mₚ, mₙ, a₀, R_∞, μ_B, μ_N
thermodynamic热力学R, k, σ, M_u, T₀, p₀, V_m

Category Palette 数据

PHYSICS_PALETTE_CATEGORIES 提供 4 个物理专属子分类的 palette 数据,常量与单位均从 ALL_CONSTANTS / ALL_UNITS 统一引用,无重复。

typescript
import { PHYSICS_PALETTE_CATEGORIES } from '@sciexpr/physics'

// 4 个物理专属子分类
PHYSICS_PALETTE_CATEGORIES
// 0: physics-constants — 15 个常用物理常量(c, h, ħ, G, e, k_B, N_A, ...)
// 1: si-units        — 20 个常用 SI 单位(m, kg, s, N, J, W, Pa, C, V, ...)
// 2: bra-ket         — 12 个量子力学记号(ket, bra, braket, 对易子, ...)
// 3: vector-calc     — 13 个矢量微积分符号(∇, ∇·, ∇×, ∇², ∂/∂x, ...)

SI 单位制与换算

typescript
import {
  SI_BASE_UNITS, DERIVED_UNITS, NON_SI_UNITS, ALL_UNITS, UNIT_CONVERSIONS,
  getUnitInfo, convert, checkDimensionalConsistency, dimensionToString,
} from '@sciexpr/physics'

// 7 个基本单位
SI_BASE_UNITS
// → m, kg, s, A, K, mol, cd

// 17 个导出单位(含量纲分解)
DERIVED_UNITS
// → N, J, W, Pa, C, V, Ω, F, T, Wb, H, Hz, Bq, Gy, Sv, lm, lx

// 非 SI 常用单位
NON_SI_UNITS
// → eV, Å, bar, atm, ℃, ℉, Da, ...

// 单位换算
convert(1, 'eV', 'J')      // → 1.602176634e-19
convert(100, '℃', 'K')     // → 373.15
convert(1, 'bar', 'Pa')    // → 100000
convert(1, 'atm', 'bar')   // → 1.01325

// 量纲一致性检查
checkDimensionalConsistency('N', 'J')   // → false
checkDimensionalConsistency('N', 'kg·m·s⁻²')  // → true

量纲分析

typescript
import { DimensionalAnalyzer } from '@sciexpr/physics'

const analyzer = new DimensionalAnalyzer()

// 获取物理量的量纲
analyzer.getDimensions('N')
// → { kg: 1, m: 1, s: -2 }

// 检查方程量纲一致性
analyzer.checkEquationConsistency('J', 'N·m')
// → true

// 表达式分析
analyzer.analyzeExpression('F = ma')
// → { formula: 'F = ma', detectedUnits: ['N'], suggestion: '...' }

向量运算

typescript
import { VectorOperations, VectorCalculus } from '@sciexpr/physics'

const vec = new VectorOperations()

// 点积 / 叉积 / 模长
vec.dot([1,2,3], [4,5,6])        // → 32
vec.cross([1,0,0], [0,1,0])      // → [0, 0, 1]
vec.norm([3,4,0])                // → 5

// 单位向量 / 夹角 / 加减 / 标量乘
vec.unitVector([3,0,0])          // → [1, 0, 0]
vec.angle([1,0,0], [0,1,0])     // → π/2
vec.add([1,2,3], [4,5,6])       // → [5, 7, 9]
vec.scale([1,2,3], 2)           // → [2, 4, 6]

矢量微积分 LaTeX 生成

typescript
const vc = new VectorCalculus()

vc.gradient('f')                 // → '\\nabla f'
vc.divergence('\\mathbf{F}')     // → '\\nabla \\cdot \\mathbf{F}'
vc.curl('\\mathbf{F}')           // → '\\nabla \\times \\mathbf{F}'
vc.laplacian('\\phi')            // → '\\nabla^{2} \\phi'
vc.directionalDerivative('f', '\\mathbf{v}')
// → '(\\mathbf{v} \\cdot \\nabla) f'

// 展开形式
vc.gradientExpanded('f')
// → '\\nabla f = (∂f/∂x, ∂f/∂y, ∂f/∂z)'
vc.laplacianExpanded('\\phi')
// → '∇²φ = ∂²φ/∂x² + ∂²φ/∂y² + ∂²φ/∂z²'

Bra-Ket 量子力学记号

typescript
import { BraKetUtils } from '@sciexpr/physics'

const bk = new BraKetUtils()

// 右矢 / 左矢
bk.ket('\\psi')                  // → '\\ket{\\psi}'
bk.bra('\\phi')                  // → '\\bra{\\phi}'

// 内积
bk.braket('\\psi', '\\phi')      // → '\\braket{\\psi|\\phi}'
bk.braket('\\psi')               // → '\\braket{\\psi}'     (模方)

// 含算符的期望值
bk.braketOperator('\\psi', 'H', '\\psi')
// → '\\bra{\\psi}\\hat{H}\\ket{\\psi}'

bk.expectationValue('H')         // → '⟨Ĥ⟩'
bk.expectationValueExpanded('H') // → '⟨ψ|Ĥ|ψ⟩'

// 对易子 / 反对易子
bk.commutator('x', 'p')          // → '[x̂, p̂]'
bk.anticommutator('A', 'B')      // → '{Â, B̂}'

物理公式验证

typescript
import { PhysicsValidator } from '@sciexpr/physics'

const validator = new PhysicsValidator()

// 检查常量使用
validator.checkConstantUsage('E = mc^2')
// → ['c']

validator.checkConstantUsage('F = G * m1 * m2 / r^2')
// → ['G']

基于 MIT 协议发布