一、基本定义与性质

1. Riemann-Liouville分数阶积分

定义式

性质

  • 半群性:$\displaystyle I^\alpha I^\beta = I^{\alpha+\beta}$
  • 当$\alpha\to n^+$时收敛于n重积分
  • 对常数$C$的积分:$\displaystyle I^\alpha C = \frac{C(t-a)^\alpha}{\Gamma(\alpha+1)}$

2. Caputo分数阶导数

定义式

其中$m-1 < \alpha \leq m$, $m\in\mathbb{N}$

优势

  • 常数导数为零:$^C D^\alpha C = 0$
  • 允许传统初始条件:$\displaystyle f(a), f’(a),…,f^{(m-1)}(a)$

3. Grünwald-Letnikov定义

离散形式

权重系数递推

本文我们主要关注Riemann-Liouville 分数阶积分与分数阶导数的性质

二、Riemann-Liouville 分数阶积分与分数阶导数的关系推导

1. Riemann-Liouville 分数阶积分的定义

设函数 $f(t)$ 在区间 $[a, t]$ 上定义,阶数 $\alpha > 0 $,则 Riemann-Liouville 左侧分数阶积分 定义为:

其中 $\Gamma(\alpha)$ 是 Gamma 函数。


2. Riemann-Liouville 分数阶导数的定义

设 $n = \lceil \alpha \rceil$ 是不小于 $ \alpha $ 的最小整数,则 Riemann-Liouville 分数阶导数 定义为:

即:分数阶导数是对分数阶积分的整数阶导数。


3. 从积分推导到导数

设有:

我们希望找到某种操作 $D^\alpha$ 使得:

使用分数阶导数的定义,我们有:

那么对于 $f(t) = I^\alpha g(t)$,有:

因为:


4. 总结关系

  • 分数阶积分是分数阶导数的逆操作:

  • 分数阶导数可以表示为先做积分,再做整数阶导数:

    其中 $n = \lceil \alpha \rceil$。


5. 特殊情况举例 $( 0 < \alpha < 1 )$

当 $0 < \alpha < 1$ 时,有:

  • 分数阶积分:

  • 分数阶导数:


6. 结论

Riemann-Liouville 分数阶导数与积分之间的本质关系是:

也即:

  • 分数阶导数 = 整数阶导数 ∘ 分数阶积分
  • 分数阶积分 = 分数阶导数的逆操作。

三、重要数学特性

1. 非局部性证明

对于任意$t>a$:

其中$n=\lceil\alpha\rceil$

2. Leibniz法则推广

3. Laplace变换关系

四、数值实现方法

1. 分数阶微积分的离散化方案

Grunwald-Letnikov改进格式

其中$p$为精度阶数,权重系数满足:

2. 短记忆原理实现

MATLAB代码示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function [dy] = fgl_deriv(a, y, h, L)
% 参数说明:
% a: 分数阶次 (0 < a < 1)
% y: 输入信号序列
% h: 采样步长
% L: 记忆窗口长度

n = length(y);
dy = zeros(size(y));
weights = zeros(n,1);
weights(1) = 1;

for k = 1:n-1
weights(k+1) = (1 - (a+1)/k)*weights(k);
end

M = min(floor(L/h), n-1);
for i = M+1:n
dy(i) = sum(weights(1:M+1).*y(i:-1:i-M)')/h^a;
end
end

3. 分数阶微分方程求解器

3.1 Predictor-Corrector算法完整推导

对于分数阶初值问题:

离散化步骤

  1. 分数阶积分近似

  2. 预测项计算

    其中权重系数:

  3. 校正项计算

    校正权重:

3.2 Python实现代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import numpy as np
from scipy.special import gamma

def frac_pc_solver(f, alpha, y0, t_span, h):
"""
Predictor-Corrector方法求解分数阶微分方程

参数:
f: 右端函数 f(t,y)
alpha: 分数阶次 (0 < alpha < 1)
y0: 初始条件
t_span: 时间区间 [t0, tf]
h: 步长

返回:
t: 时间节点数组
y: 解向量
"""
t0, tf = t_span
t = np.arange(t0, tf + h, h)
n = len(t) - 1
y = np.zeros(n + 1)
y[0] = y0

# 预计算权重
b_weights = [(k+1)**alpha - k**alpha for k in range(n+1)]
a_weights = np.zeros((n+1, n+1))
for j in range(n+1):
if j == 0:
a_weights[:,j] = np.arange(n+1)**(alpha+1) - \
(np.arange(n+1)-alpha)*(np.arange(n+1)+1)**alpha
else:
a_weights[j:,j] = (np.arange(n+1-j)+2)**(alpha+1) + \
(np.arange(n+1-j))**(alpha+1) - \
2*(np.arange(n+1-j)+1)**(alpha+1)

for n_step in range(n):
# Predictor
y_p = y0 + (h**alpha/gamma(alpha+1)) * \
sum(b_weights[n_step - k] * f(t[k], y[k]) for k in range(n_step+1))

# Corrector
sum_c = sum(a_weights[n_step+1, k] * f(t[k], y[k]) for k in range(n_step+1))
y[n_step+1] = y0 + (h**alpha/gamma(alpha+2)) * \
(f(t[n_step+1], y_p) + sum_c)

return t, y

3.3 收敛性分析

理论误差界

对于分数阶微分方程:

Predictor-Corrector 方法的全局误差为:

其中:

  • $C$ 依赖于 $\alpha$、$f$ 的 Lipschitz 常数和终态时间 $T$。
  • 当 $\alpha \to 1^-$,收敛阶趋近于 2(与经典 ODE 一致)。

数值验证实验

测试方程:
解析解:

python误差计算代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import numpy as np
from scipy.special import gamma
from scipy.integrate import quad

def exact_solution(t, alpha=0.6):
# 解析解计算(需数值积分)
integral = quad(lambda tau: (t - tau)**(alpha - 1) * tau**3, 0, t)[0]
return t**3 - gamma(4)/gamma(3.4) * integral / gamma(alpha)

def compute_errors(alpha=0.6, T=1, steps=[0.1, 0.05, 0.025, 0.0125]):
errors = {}
for h in steps:
t, y = frac_pc_solver(lambda t, y: gamma(4)/gamma(3.4) * t**2.4 - y,
alpha, 0, [0, T], h)
y_exact = np.array([exact_solution(ti) for ti in t])
errors[h] = np.max(np.abs(y - y_exact))
return errors

# 输出误差表
errors = compute_errors()
print("| 步长 h | 最大误差 E_inf | 收敛阶 p |")
print("|--------|----------------|----------|")
h_list = sorted(errors.keys())
for i in range(len(h_list)):
h = h_list[i]
if i == 0:
p = "--"
else:
p = np.log(errors[h_list[i-1]] / errors[h]) / np.log(h_list[i-1] / h)
p = f"{p:.2f}"
print(f"| {h:.4f} | {errors[h]:.4e} | {p} |")

高阶方法扩展(Adams 型)

对于更高精度需求,可采用 分数阶 Adams-Bashforth-Moulton (ABM) 方法:

Predictor:

Corrector:

其中权重系数:

python实现代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
def frac_abm_solver(f, alpha, y0, t_span, h, corrector_steps=2):
t = np.arange(t_span[0], t_span[1] + h, h)
n = len(t) - 1
y = np.zeros(n + 1)
y[0] = y0

# 计算权重
def b_weight(k, alpha):
return ((k+1)**alpha - k**alpha) / alpha

def a_weight(k, alpha):
return ((k+2)**(alpha+1) - 2*(k+1)**(alpha+1) + k**(alpha+1)) / (alpha+1)

for i in range(n):
# Predictor
y_p = y0 + (h**alpha / gamma(alpha)) * sum(
b_weight(i - j, alpha) * f(t[j], y[j]) for j in range(i+1))

# 多步校正
for _ in range(corrector_steps):
sum_c = sum(a_weight(i - j, alpha) * f(t[j], y[j]) for j in range(i+1))
y[i+1] = y0 + (h**alpha / gamma(alpha+2)) * (
f(t[i+1], y_p) + sum_c)
y_p = y[i+1] # 迭代校正

return t, y

3.4 改进算法变体

自适应步长控制

通过局部误差估计:

步长调整策略:


高阶修正格式

采用加权 Grünwald 近似:

其中 $c_k$ 为修正系数,$\Delta^k$ 为阶差分算子。

差分算子 $\Delta^k$

修正系数 $c_k$

MATLAB高阶实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
function [t, y] = high_order_frac_solver(f, alpha, y0, t_span, h, p)
t = t_span(1):h:t_span(2);
n = length(t);
y = zeros(1, n);
y(1) = y0;

% 计算 Grünwald 权重
w = zeros(1, n);
w(1) = 1;
for k = 1:n-1
w(k+1) = (1 - (alpha + 1)/k) * w(k);
end

% 计算差分修正系数
c = zeros(1, p);
for k = 1:p
c(k) = (-1)^k / factorial(k) * prod(alpha - (0:k-1) + 1);
end

for i = 2:n
% 基础 Grünwald 近似
D_alpha = sum(w(1:i) .* y(i:-1:1)) / h^alpha;

% 高阶修正项
correction = 0;
for k = 1:p
if i > k
delta_k = sum((-1).^(0:k) .* nchoosek(k, 0:k) .* y(i:-1:i-k));
correction = correction + c(k) * delta_k / h^alpha;
end
end

% 更新解
y(i) = y(i-1) + h * f(t(i-1), D_alpha + correction);
end
end

3.5 刚性系统处理

隐式格式的牛顿迭代法

  1. 隐式方程
  2. 牛顿迭代步骤其中 $J_f$ 为 Jacobi 矩阵。

python刚性系统求解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
def implicit_frac_solver(f, jacobian, alpha, y0, t_span, h, max_iter=10, tol=1e-8):
t = np.arange(t_span[0], t_span[1] + h, h)
n = len(t)
y = np.zeros((n, len(y0)))
y[0] = y0

for i in range(1, n):
# 显式预测
y_pred = y[0] + (h**alpha / gamma(alpha + 1)) * sum(
((i - j + 1)**alpha - (i - j)**alpha) * f(t[j], y[j])
for j in range(i))

# 隐式校正(牛顿迭代)
y_current = y_pred.copy()
for _ in range(max_iter):
residual = y_current - y[0] - (h**alpha / gamma(alpha + 2)) * (
f(t[i], y_current) +
sum(a_weight(i - j - 1, alpha) * f(t[j], y[j]) for j in range(i)))

J = np.eye(len(y0)) - (h**alpha / gamma(alpha + 2)) * jacobian(t[i], y_current)
delta = np.linalg.solve(J, -residual)
y_current += delta

if np.linalg.norm(delta) < tol:
break

y[i] = y_current

return t, y

# 辅助函数:计算隐式权重
def a_weight(k, alpha):
return ((k + 2)**(alpha + 1) - 2 * (k + 1)**(alpha + 1) + k**(alpha + 1)) / (alpha + 1)

理论分析

1. 稳定性
  • 隐式格式对刚性系统的稳定性优于显式格式,稳定区域覆盖整个负半平面。
2. 计算复杂度
方法 每步计算量 适用场景
自适应步长 $O(n)$ 非光滑解
高阶修正 $O(n + p^2)$ 高精度需求
隐式迭代 $O(n \cdot d^3)$ 刚性系统 ($d$ 为维数)
3. 收敛性

其中 $\tau$ 为牛顿迭代容差。

五、典型应用案例

1. 异常扩散建模

时间分数阶扩散方程

解析解

其中$M_\beta(z)$是Wright函数。

2. 粘弹性材料本构关系

分数阶Kelvin-Voigt模型

3. 锂电池状态估计

分数阶等效电路模型

参数辨识算法

1
2
3
4
5
6
7
8
9
def fode_identify(data, alpha_range, beta_range):
from scipy.optimize import minimize
def cost(params):
alpha, beta, C, R = params
# 实现分数阶数值求解
return error
res = minimize(cost, x0=[0.5,0.5,1,1],
bounds=[alpha_range, beta_range, (0,None), (0,None)])
return res.x