Engee 文档
Notebook

工程师中差、导数和积分的关系:从理论到实践

数学分析是许多科学和工程领域的基础。 导数和积分用于物理,经济学,机器学习,甚至游戏AI。 Engee,由于其性能和用户友好的语法,非常适合数值计算。

在本文中,我们将分析:

  1. 如何计算Engee中的导数和积分
  2. 在建模和优化中的实际应用
  3. 真实项目的例子

1. 导数:从数学到代码

函数(f(x))的导数显示其变化率。 在Engee中,它可以解析地(符号地)或数字地计算。

1.1. 数值微分*

包裹 FiniteDifferences 允许您使用有限差分法计算导数:

In [ ]:
Pkg.add("FiniteDifferences")
   Resolving package versions...
  No Changes to `~/.project/Project.toml`
  No Changes to `~/.project/Manifest.toml`
In [ ]:
using FiniteDifferences

f(x) = x^2 + sin(x)
df = central_fdm(5, 1)(f, 1.0)  # Производная в точке x=1
println("f'(1) ≈ ", df)  # ≈ 2.5403 (точное значение: 2 + cos(1) ≈ 2.5403)
f'(1) ≈ 2.5403023058683987

在实际项目中的应用:

-在物理学中,加速度的计算(速度的导数)。
-在经济学中,边际成本(成本函数的导数)。

1.2. 自动分化(AD)

Engee支持自动分化通过 ForwardDiff:

In [ ]:
using ForwardDiff

f(x) = 3x^3 + 2x^2 + x
df_analytical(x) = ForwardDiff.derivative(f, x)

println("f'(2) = ", df_analytical(2))  # Выведет 45
f'(2) = 45

在哪里使用?

-机器学习中的优化(梯度下降)。
-微分方程的数值解。

2. 积分:从求和到建模

积分是"曲线下面积"。 在Engee中,它可以通过数值计算。

2.1. 数值积分

包裹 QuadGK 实现Gauss-Kronrod方法:

In [ ]:
Pkg.add("QuadGK")
   Resolving package versions...
  No Changes to `~/.project/Project.toml`
  No Changes to `~/.project/Manifest.toml`
In [ ]:
using QuadGK

f(x) = exp(-x^2)
integral, err = quadgk(f, 0, 1)
println("∫e^{-x²}dx ≈ ", integral)
println("Error estimate: ", err)
∫e^{-x²}dx ≈ 0.746824132812427
Error estimate: 7.887024366937112e-13

使用例子:

-**财务:**计算贴现现金流量。
-**物理:**力功的计算。

2.2. 微分方程的积分*

包裹 DifferentialEquations.jl 解决复杂的动态系统:

In [ ]:
Pkg.add("DifferentialEquations")
In [ ]:
using DifferentialEquations

# Модель хищник-жертва (Лотка-Вольтерра)
function lotka_volterra!(du, u, p, t)
    x, y = u
    α, β, δ, γ = p
    du[1] = α*x - β*x*y  # dx/dt
    du[2] = δ*x*y - γ*y  # dy/dt
end

u0 = [1.0, 1.0]          # Начальные условия: [жертвы, хищники]
tspan = (0.0, 10.0)       # Временной интервал
p = [1.5, 1.0, 1.0, 3.0] # Параметры модели

prob = ODEProblem(lotka_volterra!, u0, tspan, p)
sol = solve(prob, Tsit5())

using Plots
plot(sol, xlabel="Время", ylabel="Популяция", label=["Жертвы" "Хищники"])
Out[0]:

在哪里应用?

-**生物学:**人口建模。
-**工程:**系统动力学的计算。

3. 导数与积分的关系:热导率方程

考虑热导率方程:
∂T/∂t=a·∇2t+qᵥ/(c*p)

哪里:
a=λ/(cp)为导热系数[m2/s]
接2个是拉普拉斯算(∂2/∂x2+∂2/∂y2+∂2/∂y2)

工程中的数值解:

In [ ]:
using DifferentialEquations

# Задаём сетку
L = 10.0
nx = 100
dx = L / nx
x = range(0, L, length=nx)

# Начальное условие (горячая середина)
u0 = exp.(-(x .- L/2).^2)

# Функция для правой части уравнения
function heat_equation!(du, u, p, t)
    α = p
    for i in 2:nx-1
        du[i] = α * (u[i+1] - 2u[i] + u[i-1]) / dx^2
    end
    du[1] = du[end] = 0  # Граничные условия
end

# Решаем
prob = ODEProblem(heat_equation!, u0, (0.0, 1.0), 0.1)
sol = solve(prob, Tsit5())

# Визуализация
anim = @animate for t in range(0, 1, length=50)
    plot(x, sol(t), ylims=(0,1), xlims=(2.5,7.5), title="Распределение тепла, t=$t")
end
gif(anim, "heat.gif", fps=10)
[ Info: Saved animation to /user/my_projects/Demo/heat.gif
Out[0]:
No description has been provided for this image

申请:

-**物理:**传热的模拟。
-**财务:**期权的计算(布莱克-斯科尔斯方程)。

结论

Engee为处理导数和积分提供了强大的工具.:

  • ForwardDiff-用于渐变和优化。
  • QuadGK-用于数值积分。
  • DifferentialEquations.jl-用于建模动态系统。

这些方法用于:

*物理(传热,力学)

*经济学(优化,预测)

*数据科学(模型学习,扩散过程)