符号计算项目想法

高效的张量微分

实现用于张量表达式的 D* 算法

推荐技能:高中/大一微积分和基础图论(可选)

预期结果:一个能够对张量表达式进行高效微分的 D* 算法工作实现。

导师Yingbo Ma

持续时间:350 小时

符号求根

Symbolics.jl 有强大的方法可以将符号表达式转换为多元多项式。现在在 (Groebner.jl) 中有强大的 Groebner 基实现。在许多应用中,找到多项式集的根和品种将非常有用。这个项目将涉及实现各种求解多项式系统的方法,以及在可能的情况下其他非线性方程组。一个好的提案应该尝试枚举一些值得实现的技术,例如

  1. 度数 <= 4 的多项式系统的解析解

  2. 使用 HomotopyContinuations.jl 测试可解性和寻找数值解

  3. 牛顿-拉弗森方法

  4. 使用 Groebner 基计算来寻找品种

这些功能的 API 应该非常用户友好

  1. 单个 roots 函数应该接受方程集,并以正确类型的根作为输出(无论是品种还是数值答案)

  2. 它应该自动找到最快的策略来解决方程组并应用它。

  3. 当方程不可解或以某种方式退化时,它应该以描述性错误消息失败。

  4. 这应该允许在调用 eigs 时实现符号特征值计算。

导师Shashi GowdaAlexander Demin 持续时间:350 小时

Symbolics.jl 中的符号积分

实现 符号积分的启发式方法。然后连接到规则库,例如 RUMI。还可以考虑使用符号数值积分技术(https://github.com/SciML/SymbolicNumericIntegration.jl)的潜力

推荐技能:高中/大一微积分

预期结果:Symbolics.jl 库中符号积分的工作实现,以及演示其在科学学科中的使用的文档和教程。

导师Shashi GowdaYingbo Ma

持续时间:350 小时

XLA 风格的符号跟踪优化

接受数组并输出数组或标量的 Julia 函数可以使用 Symbolics.jl 变量进行跟踪,以生成操作的跟踪。此输出可以优化为使用融合操作或调用高度特定的 NNLib 函数。在这个项目中,你将跟踪 Flux.jl 神经网络函数,并在生成的符号表达式上应用优化。这主要可以实现为基于规则的重写规则(参见 https://github.com/JuliaSymbolics/Symbolics.jl/pull/514)。

推荐技能:了解数组操作的空间和时间复杂度,优化数组代码的经验。

导师Shashi Gowda

持续时间:175 小时

自动提高浮点精度 (Herbie)

Herbie 文档记录了一种优化浮点函数的方法,以便减少指令计数,同时重新组织操作,以使浮点不准确不会被放大。在 Julia 中编写它并使其在 Symbolics.jl 表达式上运行将是一个很好的补充。理想的实现将使用 Metatheory.jl 的 e-graph 设施来实现这一点。

导师Shashi GowdaAlessandro Cheli

持续时间:350 小时