export const MODEL_VERSION='1.0.0',DEFAULTS=Object.freeze({ratio:1,unknown:200,comparison:180,E:2,RG:1000}); export function validateParameters(p){if(![.1,1,10,100].includes(p.ratio))throw new RangeError('比率');for(const[k,a,b]of[['unknown',10,1e5],['comparison',.1,1e6],['E',.1,10],['RG',10,1e5]])if(!Number.isFinite(p[k])||p[k]b)throw new RangeError(k);return{...p};} export function response(p){validateParameters(p);const ra=1000*p.ratio,rb=1000,oc=p.E/(1+p.ratio)-p.E*p.comparison/(p.unknown+p.comparison),rt=ra*rb/(ra+rb)+p.unknown*p.comparison/(p.unknown+p.comparison),ig=oc/(rt+p.RG);return {ratio:p.ratio,comparison:p.comparison,galvanometer_uA:ig*1e6,inferredResistance:p.ratio*p.comparison,openVoltage:oc,theveninResistance:rt};} export function plots(p){const fractions=Array.from({length:201},(_,i)=>.8+.4*i/200),balance=p.unknown/p.ratio;return[{caption:'比较臂微调时的检流计电流',xLabel:'比较臂相对平衡值 Rs / (Rx/M)',yLabel:'检测电流 IG / μA',curves:[{points:fractions.filter(q=>balance*q>=.1&&balance*q<=1e6).map(q=>[q,response({...p,comparison:balance*q}).galvanometer_uA])}]},{caption:'同一失衡下检测支路内阻与灵敏度',xLabel:'log₁₀(RG / Ω)',yLabel:'检测电流 IG / μA',curves:[{points:Array.from({length:201},(_,i)=>{const x=1+4*i/200;return[x,response({...p,RG:10**x}).galvanometer_uA];})}]}];} export function analyzeRecords(rows,p){const s=rows.filter(r=>['ratio','unknown','E','RG'].every(k=>r.parameters[k]===p[k]));if(!s.length)return'调节比较臂使检流计归零;只有平衡条件成立时 MRₛ 才是待测电阻估计。';const best=s.reduce((a,b)=>Math.abs(a.readings.galvanometer_uA)