Julia 微积分简要介绍

Table of Contents

  1. 介绍
  2. 使用
    1. 导数 using Calculus
    2. 多元导数 using Calculus
    3. 积分 using Cubature
    4. 多元积分 using Cubature
  3. 补充说明

介绍

JuliaMath 下有一个微积分包,闲得没事看看文档,给大家简要整理了一下

  • derivative 求导
  • second_derivative 求二阶导

然而关于积分,文档里说

The Calculus package no longer provides routines for univariate numerical integration. Use QuadGK.jl instead.

他说单变量的积分在这个包中不再支持,可以去使用 QuadGK.jl 包中
我又尝试了下 Calculus 包中的 integrate 函数

f((x, y)) = sin(x) + cos(y)

我发现,这个错误中的 quadgkQuadGk 中的 quadgk 不是同一个函数,他指的是 Calculus.quadgk
这个函数不存在

另外我去谷歌了一下,发现 Quadgk 不支持多重积分,所以我推荐使用同在 JuliaMath 仓库下的 Cubature.jl
既可以做单变量积分,又可以做多变量积分

使用

导数 using Calculus

derivative

derivative(sin, 0) == cos(0)
derivative(sin, 1) == cos(1)
derivative(sin, float(pi)) = cos(float(pi))

多元导数 using Calculus

derivative

julia> derivative(f, [1, 1])
2-element Vector{Float64}:
  0.5403023058631036
 -0.8414709847974693

积分 using Cubature

hquadrature

julia> (val, err) = hquadrature(x -> x^3, 0, 1)
(0.25, 2.7755575615628914e-15)

(val, err) = hquadrature(f::Function, xmin, xmax;
			 reltol=1e-8, abstol=0, maxevals=0)

其中

  • f 是被积函数
  • xminxmax 是积分区间
  • reltol 表示 required relative error tolerance
  • abstol 表示 required absolute error tolerance
  • maxevals 表示 指定函数评估的(粗略)最大数量

多元积分 using Cubature

hcubature

(val,err) = hcubature(f::Function, xmin, xmax;
		      reltol=1e-8, abstol=0, maxevals=0)

只有函数名不同,参数类型不同,其他解释同上

f((x, y)) = x^3 * y^2
hcubature(f, [0,0],[1,1])

julia> hcubature(f, [0,0],[1,1])
(0.08333333333333331, 2.7755575615628914e-17)

补充说明

这份介绍主要是简单介绍,详细内容可以去查看这两个包的文档

5 个赞

白高兴一场,我还以为是不定积分

  • 不定微分可以自己写(以前写过但是找不到了)
  • 不定积分(至少是try to)mathmetica好像有提供

没办法,包里没有这种功能,可能要去 Symbolics.jl 里找吧

SymPy.jl 可以实现不定积分

如果被积函数含有参数,参数应该如何传递呢?

这样如何

quadgk(x->f(x, args), a, b)

Cubature本身可以实现参数传递吗?