@danielsimonjr/ mathts-函数
用于 数学。 。 。 .
MathTS的数学函数库——算术,三角学,代数,统计学,信号处理等等——通过打字功能通过数字/复杂/分数/大数/矩阵发送多态.
安装
npm install @danielsimonjr/mathts-functions
它提供的东西
- 数以百计的被键入函数( A)
add, (中文(简体) ),sin, (中文(简体) ),svd-意识到行动,parallelFFT(中文(简体) ). - 窃听器
parse编号 :evaluate在完全激活的数学范围. scalar编号 :evaluateScalar评估被打成平板树(+ - * / ^, (中文(简体) ),ln• 自然log, (中文(简体) ),log→log10,而另一个scalar呼叫。 公式字符串被拒绝 .compileScalar评估同一树Float64Array列并标记行无效evaluateScalar会扔出.compileScalarGradient重用磁带以返回每行精确的qqf/qx参数.fitScalarParameters这些常数与数据通过levenbergMarquardt, (中文(简体) ),bfgs,或nelderMead(以可选的界限进行多重起搜索).levenbergMarquardt接受可选分析jacobian内LMOptions; 默认值仍为前向偏差numericJacobian. Stiff (英语)solveODE, (中文(简体) ),solveDAE,以及solveBVP使用相同的帮助( 前置差异; ODE/ DAE 使用)step: { rel: 1e-7, floor: 1e-8 },BVP射击用途h: 1e-7) (中文(简体) ).minimize(奈德尔-米德)nelderMead具有绝对简单音阶;nelderMead保存相对默认值fitScalarParameters。 。 。 .scalarToNode编号 :nodeToScalar编号 :simplifyScalar编号 :scalarToTex—— 在平面树和有线表达式节点之间转换(无公式字符串);simplifyScalar使用同样的simplify作为表达语言.paretoFront编号 :scoreFront编号 :selectFrontModel- 名人堂,每复杂,日志损失得分,以及accuracy编号 :score编号 :best选择.frontToLatexTable编号 :frontToJson——导出得分前锋(M15).frontToLatexTable(scored, { precision })写一个tabular包含列复杂度、损失、分数、方程和标题行;损失和分数为toPrecision(precision)文本 (默认 6, 从 1 到 100 的整数), anull得分(线性损失尺度)是一个空单元格,每个等式单元格都是scalarToTex内部$…$因为atabular单元格是文本模式和\cdot, (中文(简体) ),\frac财务报告和审定财务报表\sin需要数学模式(无限分数是)$\infty$) (中文(简体) ).frontToJson(scored)返回时{ schemaVersion: 1, rows: [{ complexity, loss, score, key, tex }] }与key=:scalarCanonicalKey(item)财务报告和审定财务报表tex=:scalarToTex(item); 非无限loss或者说score是字符串'Infinity', (中文(简体) ),'-Infinity'或者说'NaN',因此报告存活下来JSON.stringify财务报告和审定财务报表JSON.parse(准确的合适分数)Infinity,以及JSON会变成线性尺度的null) (中文(简体) ). 非无限复杂RangeError。 。 。 .inferScalarDimension编号 :solveParameterDimensions- 精确的斜角树的 SI 维度Fraction在线SiDimensionVector(单位:千美元)[L,M,T,I,Θ,N,J]),或用失效节点路径标明的4起侵犯事件之一(add-mismatch, (中文(简体) ),transcendental-arg-not-dimensionless, (中文(简体) ),non-literal-exponent-on-dimensional-base, (中文(简体) ),unknown-symbol) (中文(简体) ).solveParameterDimensions从树所暗示的等式中解决每个未知的已安装参数的尺寸(+演义同意,超凡的论据是无维的,根等同target),准确通过rationalNullspace; 返回时solved, (中文(简体) ),underdetermined,或inconsistent。 。 。 .weightedMutation编号 :mutateConstant编号 :mutateOperator编号 :mutateFeature编号 :swapOperands编号 :addNode编号 :insertNode编号 :deleteNode编号 :rotateTree编号 :randomizeTree编号 :simplifyConstants编号 :identityMutation编号 :crossoverSubtrees- 变异操作员在一棵树上。 每一个都要(node, rng, ctx)带有SeededRng财务报告和审定财务报表ctx = { grammar, perturbationFactor, temperature },永不更改输入,并返回null当突变不适用或结果失败时scalarGrammarAccepts。 。 。 .weightedMutation(weights?)选择一个操作员DEFAULT_MUTATION_WEIGHTS(总结为8.512392). 身份操作员被命名identityMutation因为identity是此包的矩阵身份导出;其权重键仍然是identity。 。 。 .searchScalars——在平板树上进行进化式搜索,即:SearchProgress返回一个ScalarSearchResult由锦标赛选拔和weightedMutation; 开始于seeds加上最小的树木enumerateScalars(两者均由scalarGrammarAccepts然后,当设置,grammar.admit; 拒绝的种子被跳过, 拒绝的突变是失败的尝试), refuseparameters树的概率optimizeProbability(单位:千美元)fitScalarParameters并保持一个名人堂 其Pareto的正面报道通过paretoFront编号 :scoreFront(单位:千美元)modelSelection添加selectFrontModel· ;bestLossFactor联合国bestLossFactor何时modelSelection设置,默认为1.5).crossoverProbability默认为0(没有硬币,只有变异). 上层0每一个后代都可能crossoverSubtrees继承的参数是第一任父母的.admit必须是节点的纯函数;搜索不会复制。 损失是指默认的平方差错之和( E)loss: 'l2'页:1loss改为'l1'或者说'huber'大厅和每一间修道院都使用同样的损失fitScalarParameters可选rowWeights(一个有限>= 0每行重量)适用于两者. 可选fit对象被转发到fitScalarParameters数字 :restarts(违约2),maxIterations(违约8),bounds, (中文(简体) ),algorithm,以及initial(默认继承的向量); 错误的绑定或长度抛出RangeError在第一次收获之前。 在正重行上无效的树会丢失Infinity永远不能到达前面invalidRows: 'penalize'得分如适者无效行刑(1e8乘以其无效行,加上所选行loss相反,在有效行上.fittedParameters给出每行损失后面的值.options.rng所以一个种子能产生一个结果.runScalarSearch(problem, options)是单调形式:它消耗生成器并返回最后结果;其选项为seed(确切地说是其中之一)seed财务报告和审定财务报表rng及其问题可能给columns作为用可变名称而不是对齐数组键入的记录.maxEvaluations上限评价,包括初始人口。 与populations > 1独立岛屿rng.fork('island:' + index))并并进;每代后,每个岛屿最差的树木被其他岛屿最好(英语:fractionReplaced,默认0.00036),常扰动温度从initialTemperature(3.17) 每代0.995个annealing)和联赛排名loss * exp(adaptiveParsimonyScaling * share)地点share树的大小有多常见adaptiveParsimony,缩放1040. 只有几个岛屿 才有适应性的变质违约 所以populations: 1是一个人口搜索到最后一点.parallel: { timeoutMs?, pool? }每一代树的分数一次observed有100行或100行以上(scalar-batch.worker.js,由 URL 所加载的第二个 tsdown 条目; 参数 refit and every 随机绘图停留在调用者线程上,所以并行运行等于相同种子的串行运行,位取位.complexityWeights联合国ScalarComplexityWeights从@danielsimonjr/mathts-expression) 权衡了厅内复杂度的节点,分出分解的领带断裂,以及适应性的分解等分级;省略了,这是今天节点的计数,一个非无限的分量抛出RangeError在第一次收获之前.simplify(单位:千美元)'off' | 'constants' | 'algebraic'默认值'off'在语法检查和分数之前,简化每个种子和每个后代一次:'constants'折叠只显示数字的子树( s)simplifyConstants, (中文(简体) ),'algebraic'运行simplifyScalar页:1ScalarBuildError, (中文(简体) ),RangeError,语法拒绝(包括admit),或行评价不匹配使未简化的树保持不变(simplifyFallbacks所列举的树木是不会被简化的.timeoutMs(默认30000,必须是正数) 限制每个工人的呼叫,包括排队。 A 类pool您的通过由您终止;否则,当它首先需要时,搜索即开始,当生成器结束或关闭时,搜索即结束。 百行楼层出自M3基准(磁带与每行翻译,在呼叫者线上);没有工人往返的时间,因此平行是选入的,并不包含速度要求.numericallyEquivalent- 两棵树的样品createSeededRng,通过compileScalar,与核心比较nearlyEqual。 。 。 . 仅凭数字协议并不能证明具有象征意义的等同性; (单位:千美元)consistent判决是证据,不是证据.
import { createSeededRng } from '@danielsimonjr/mathts-core';
import {
compileScalar,
compileScalarGradient,
fitScalarParameters,
numericallyEquivalent,
frontToJson,
frontToLatexTable,
paretoFront,
scoreFront,
selectFrontModel,
scalar,
simplifyScalar,
scalarToTex,
runScalarSearch,
} from '@danielsimonjr/mathts-functions';
const node = scalar.op('*', [scalar.symbol('x'), scalar.symbol('x')]);
const linear = scalar.op('+', [
scalar.op('*', [scalar.symbol('a'), scalar.symbol('x')]),
scalar.symbol('b'),
]);
const gradCompiled = compileScalarGradient(linear, { variables: ['x'], parameters: ['a', 'b'] });
const { values, grad } = gradCompiled.evaluate([new Float64Array([3])], [2, -1]);
values[0]; // 5
[...grad]; // 3, 1 — ∂/∂a = x, ∂/∂b = 1
const quotient = scalar.op('/', [
scalar.symbol('a'),
scalar.op('/', [scalar.symbol('b'), scalar.symbol('c')]),
]);
scalarToTex(simplifyScalar(quotient)); // \frac{ a\cdot c}{ b}
const compiled = compileScalar(node, { variables: ['x'] });
compiled.evaluate([new Float64Array([2, 3])]).values; // Float64Array [4, 9]
const slope = scalar.op('*', [scalar.symbol('a'), scalar.symbol('x')]);
const xCol = new Float64Array([1, 2, 3]);
const yCol = new Float64Array([2, 4, 6]);
fitScalarParameters(slope, [xCol], yCol, ['x'], { parameters: ['a'], restarts: 0 }).parameters[0]; // 2
const front = paretoFront([
{ loss: 0.5, complexity: 1, item: 'x' },
{ loss: 0.1, complexity: 3, item: 'x^3' },
]);
selectFrontModel(scoreFront(front), 'best').item; // 'x^3'
frontToJson(scoreFront([{ loss: 0.5, complexity: 1, item: scalar.symbol('x') }])).rows[0]!.key; // '{"k":"s","v":"x"}'
const rng = createSeededRng(1);
const id = scalar.op('+', [
scalar.op('^', [scalar.call('sin', scalar.symbol('x')), scalar.number(2)]),
scalar.op('^', [scalar.call('cos', scalar.symbol('x')), scalar.number(2)]),
]);
numericallyEquivalent(id, scalar.number(1), { domain: { x: [0, 1] }, rng }).verdict; // 'consistent' — evidence, not proof
const quadGrammar = {
variables: ['x'],
binary: ['+', '*', '^'],
unary: [],
literals: [1],
maxSize: 7,
} as const;
const quad = scalar.op('+', [
scalar.op('*', [scalar.symbol('x'), scalar.symbol('x')]),
scalar.symbol('x'),
]);
const xs = new Float64Array(20);
for (let i = 0; i < 20; i += 1) xs[i] = -1 + (2 * i) / 19;
const quadResult = await runScalarSearch(
{
variables: ['x'],
columns: { x: xs },
observed: compileScalar(quad, { variables: ['x'] }).evaluate([xs]).values,
},
{ grammar: quadGrammar, seed: 7, populationSize: 8, tournamentSize: 4, maxEvaluations: 120 }
);
quadResult.front.at(-1)?.item; // x^2 + x — the planted law, at loss 0
quadResult.stopReason; // 'max-evaluations' — runScalarSearch consumes the generator for you
- 还将公布每个领域的重点切入点:
@danielsimonjr/mathts-{arithmetic,trigonometry,statistics,signal}。 。 。 .
许可证
MIT (c) 小丹尼尔·西蒙.