计算数列的微分(整数阶微分)

import numpy as np
from scipy.special import gamma
from scipy.linalg import toeplitz
import matplotlib.pyplot as plt

# 第一种实现方式
def fgl_deriv(a, y, h=0.01):
    """

    Args:
        a: 微分阶数,整数
        y: 求微分的数列
        h: 步伐

    Returns:

    """
    n = len(y)
    J = np.arange(n)
    G1 = gamma(J + 1)
    G2 = gamma(a + 1 - J)
    s = (-1) ** J

    M = np.tril(np.ones((n, n)))
    R = np.array([y[i-j] for i in range(n) for j in range(n)]).reshape((n, n))
    T = (gamma(a + 1) / (h ** a)) * s / (G1 * G2)
    Y = np.sum(R * (M * T[:, None].T), axis=1)

    return Y

# # 第二种实现方式
# def fgl_deriv(a, y, h):
#     n = len(y)
#     J = np.arange(n)
#     G1 = gamma(J + 1)
#     G2 = gamma(a + 1 - J)
#     s = (-1) ** J
#
#     M = np.tril(np.ones((n, n)))
#     R = toeplitz(y)
#     T = np.meshgrid((gamma(a + 1) / (h ** a)) * s / (G1 * G2))[0]
#     Y = np.reshape(np.sum(R * M * T, axis=1), y.shape)
#
#     return Y



data = np.random.random((100))
data = np.sin(data)

dataa = fgl_deriv(1, data)
print(dataa)
# plt.plot(range(len(data)),data, label="001",linewidth=1.5)
plt.plot(range(len(data)),dataa, label="001",linewidth=1.5)
plt.show()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清纯世纪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值