14 个版本
0.1.9 | 2024年7月10日 |
---|---|
0.1.8 | 2024年7月10日 |
0.1.6 | 2024年6月12日 |
0.1.5 | 2024年5月28日 |
0.1.1 | 2024年3月19日 |
#257 in 数学
298 每月下载量
用于 diffsol
11MB
146K SLoC
DiffSL
针对以下形式的普通微分方程(ODE)领域特定语言的编译器
$$ M(t) \frac{d\mathbf{u}}{dt} = F(\mathbf{u}, t) $$
以下代码定义了一个经典的 DAE 测试案例,即 Robertson (1966) 问题,该问题通过以下方程集建模自催化反应的动力学
$$ \begin{align} \frac{dx}{dt} &= -0.04x + 10^4 y z \ \frac{dy}{dt} &= 0.04x - 10^4 y z - 3 \cdot 10^7 y^2 \ 0 &= x + y + z - 1 \end{align} $$
该问题的 DiffSL 代码如下
in = [k1, k2, k3]
k1 { 0.04 }
k2 { 10000 }
k3 { 30000000 }
u_i {
x = 1,
y = 0,
z = 0,
}
dudt_i {
dxdt = 1,
dydt = 0,
dzdt = 0,
}
M_i {
dxdt,
dydt,
0,
}
F_i {
-k1 * x + k2 * y * z,
k1 * x - k2 * y * z - k3 * y * y,
1 - x - y - z,
}
out_i {
x,
y,
z,
}
DiffSL 语言特性
有关完整说明,请参阅 DiffSL 语言文档。
- 张量类型
- 标量(双精度浮点数)
- 向量(标量的一维数组)
- 标量的 n 维张量
- 稀疏/密集/对角张量
- 张量操作
- 逐元素操作
- 广播
- 通过索引符号进行张量 contraction/matmul/translation 等
用法
通常,使用支持该语言的常微分方程求解器是使用 DiffSL 的最简单方法,例如 diffsol 库。请参阅 diffsol 文档并咨询 DiffSL 语言文档 获取更多信息。
如果您正在编写自己的常微分方程求解器并希望使用 DiffSL 编译器,请通过提交问题、联系 作者 或查看 diffsol 源代码 来取得联系。
依赖项
您需要安装 LLVM 项目。最简单的方法是使用您操作系统的包管理器。例如,在 Ubuntu 上,您可以使用以下命令安装这些依赖项
sudo apt-get install llvm
安装
您可以使用 cargo 安装 DiffSL。您需要通过特性标志来指定已安装的 llvm 版本。例如,对于 llvm 14
cargo add diffsl --features llvm14-0
支持其他版本的 llvm,特性包括 llvm13-0
、llvm14-0
、llvm15-0
、llvm16-0
、llvm17-0
。
依赖项
~5–8.5MB
~158K SLoC