实现用于张量表达式的 D* 算法。
推荐技能:高中/大一微积分和基础图论(可选)
预期结果:一个能够对张量表达式进行高效微分的 D* 算法工作实现。
导师:Yingbo Ma
持续时间:350 小时
Symbolics.jl 有强大的方法可以将符号表达式转换为多元多项式。现在在 (Groebner.jl) 中有强大的 Groebner 基实现。在许多应用中,找到多项式集的根和品种将非常有用。这个项目将涉及实现各种求解多项式系统的方法,以及在可能的情况下其他非线性方程组。一个好的提案应该尝试枚举一些值得实现的技术,例如
度数 <= 4 的多项式系统的解析解
使用 HomotopyContinuations.jl 测试可解性和寻找数值解
牛顿-拉弗森方法
使用 Groebner 基计算来寻找品种
这些功能的 API 应该非常用户友好
单个 roots
函数应该接受方程集,并以正确类型的根作为输出(无论是品种还是数值答案)
它应该自动找到最快的策略来解决方程组并应用它。
当方程不可解或以某种方式退化时,它应该以描述性错误消息失败。
这应该允许在调用 eigs
时实现符号特征值计算。
导师:Shashi Gowda,Alexander Demin 持续时间:350 小时
实现 符号积分的启发式方法。然后连接到规则库,例如 RUMI。还可以考虑使用符号数值积分技术(https://github.com/SciML/SymbolicNumericIntegration.jl)的潜力
推荐技能:高中/大一微积分
预期结果:Symbolics.jl 库中符号积分的工作实现,以及演示其在科学学科中的使用的文档和教程。
持续时间:350 小时
接受数组并输出数组或标量的 Julia 函数可以使用 Symbolics.jl 变量进行跟踪,以生成操作的跟踪。此输出可以优化为使用融合操作或调用高度特定的 NNLib 函数。在这个项目中,你将跟踪 Flux.jl 神经网络函数,并在生成的符号表达式上应用优化。这主要可以实现为基于规则的重写规则(参见 https://github.com/JuliaSymbolics/Symbolics.jl/pull/514)。
推荐技能:了解数组操作的空间和时间复杂度,优化数组代码的经验。
导师:Shashi Gowda
持续时间:175 小时
Herbie 文档记录了一种优化浮点函数的方法,以便减少指令计数,同时重新组织操作,以使浮点不准确不会被放大。在 Julia 中编写它并使其在 Symbolics.jl 表达式上运行将是一个很好的补充。理想的实现将使用 Metatheory.jl 的 e-graph 设施来实现这一点。
导师:Shashi Gowda,Alessandro Cheli
持续时间:350 小时