You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现Fractional Differentiation出现TypeError报错咨询

报错原因分析
  • 变量名冲突:函数入参命名为x,但函数内部第一行又将x定义为sympy符号变量,直接覆盖了传入的训练数据集数值,导致后续运算对象全是符号而非实际数据。
  • 数值函数调用参数错误:通过lambdify生成的d4fdx4_f是可接收数值/数组的数值运算函数,但你调用时传入的是sympy符号变量x,符号对象传入numpy的ufunc通用函数时无法被识别,就触发了“Pow类型没有可调用的sin方法”的类型错误。
  • 函数无返回值:原函数没有写return语句,执行完后赋值给X_train_vectorized的结果会是None,属于隐性bug。
  • 额外问题:当前代码实际计算的是4阶整数导数,并未实现你需要的分数阶微分逻辑。
修复方案

先给出解决报错的可运行基础代码,如需适配分数阶微分按注释调整即可:

import sympy as smp
import numpy as np

def fractional_derivative(input_arr):
    # 符号变量不和入参重名,避免覆盖
    x_sym, a, b, c = smp.symbols('x_sym a b c', real = True)
    f = smp.exp(-a*smp.sin(x_sym**2)) * smp.sin(b**x_sym) * smp.log(c * smp.sin(x_sym)**2 /x_sym) 
    # 如需分数阶微分,直接把阶数4替换为你需要的非整数即可,sympy原生支持
    dfdx_order  = smp.diff(f, x_sym, 4).evalf()
    # 指定numpy后端适配数组输入
    dfdx_f = smp.lambdify((x_sym, a, b, c) , dfdx_order, modules='numpy')
    # 传入实际输入数组计算结果
    y = dfdx_f(input_arr, a=1, b=2, c=3)
    print("Successfully Implemented and new feature are created based on Fractional Derivative.") 
    # 补充返回值
    return y

# 调用示例
# X_train_vectorized = fractional_derivative(X_train_vectorized)

内容的提问来源于stack exchange,提问作者Asif Khan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 00:45:03