@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']