ITADN
JuliaDiff/FiniteDiff.jl
JuliaDiff/FiniteDiff.jl · 文件 下载 ZIP
文件最后提交记录最后更新时间
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈

有限差分

Join the chat at https://julialang.zulipchat.com #sciml-bridged Global Docs

codecov Build Status

ColPrac: Contributor's Guide on Collaborative Practices for Community Packages SciML Code Style

概述

本包用于数值计算导数、梯度、雅可比矩阵、海森矩阵等。 该库旨在为最终用户提供可用的接口,同时最大化速度, 并针对数组类型和稀疏性进行特化。 包含以下内容:

  • 完全无分配的 mutable 形式,以支持快速数组操作
  • 完全非 mutating 形式,以支持静态数组
  • 用于高效计算稀疏雅可比矩阵的着色向量
  • 在有限差分允许的范围内,兼容 GPU。

如果你想要最快的版本,请创建一个缓存,并在不同的 x 值(或不同的 f 函数)上 重复调用差分函数; 如果你想要一个快速且粗略的数值答案,请直接调用差分函数。

对于使用自动微分的类似稀疏微分,请参阅 SparseDiffTools.jl

FiniteDiff.jl 与 FiniteDifferences.jl

FiniteDiff.jlFiniteDifferences.jl 是类似的库:两者都通过数值方法计算近似导数。 你绝对应该使用其中之一,而不是使用遗留的 Calculus.jl 有限差分,或自行重新实现。 在未来某个时间点,它们可能会合并,或者其中一个可能依赖于另一个。 目前,它们的区别如下:

  • FiniteDifferences.jl 基本上支持任何类型,而 FiniteDiff.jl 仅支持数组类类型
  • FiniteDifferences.jl 支持高阶近似
  • FiniteDiff.jl 经过精心优化以最小化内存分配
  • FiniteDiff.jl 支持着色向量以高效计算稀疏雅可比矩阵

总体结构

该库的总体结构如下。你可以直接调用差分 函数,这将分配一个临时缓存来解决问题。 为了使重复调用不产生内存分配,你可以调用缓存 构建函数。每个缓存构建函数有两种可能性: 一种是你提供原型数组,它生成缓存 变量;另一种是完全无分配的版本,你提供缓存 变量。总结如下:

  • 只想快速求导?只计算一次?调用差分函数。
  • 打算多次计算导数但没有现成的缓存数组 可用?使用分配式缓存,然后将其传入差分 函数(这将仅在缓存构建时分配一次)。
  • 从你自己的算法中拥有缓存变量并希望 在差分函数中重用它们?使用无分配式缓存构建 并将缓存传入差分函数。

有关 API 的详细信息,请参阅文档

函数定义

在所有函数中,inplace 形式为 f!(dx,x),而 out of place 形式为 dx = f(x)

Coloring vectors

允许向 Jacobian 例程提供 Coloring vectors,这些是用于构建 Jacobian 的方向导数。例如,通过使用 colorvec=repeat(1:3,N÷3),仅需 4 次 f 调用即可计算出一个精确的 NxN 三对角 Jacobian。有关自动生成稀疏矩阵的 coloring vectors 的信息,请参阅 SparseMatrixColorings.jl 和 现已弃用的 SparseDiffTools.jl

Contributing