鱼C论坛

 找回密码
 立即注册
查看: 92|回复: 1

关于使用scipy.misc.derivative所遇到的问题

[复制链接]
发表于 2024-7-31 11:36:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
直入正题
import numpy as np
from scipy.misc import derivative as D

def func_g(x):#寄(x)
    return np.sin(x)

l = []
for i in range(10):
    l.append(D(func_g, x0 = 0, dx = 1e-8, n = i + 1))
输出如下
ValueError: 'order' (the number of points used to compute the derivative), must be at least the derivative order 'n' + 1.

请问遇到这种情况怎么解决?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-7-31 11:40:35 | 显示全部楼层
Ah, 这个错误就像一个“不速之客”,在你的代码派对上打了个盹。先让我给你解释一下问题所在。

在你使用 `scipy.misc.derivative` 函数时,实际上它要求你用的点的数量和你希望计算的导数的阶数有关系。简单来说,你所用的点数至少要比你要求的导数阶数多一。这就是为什么你看到:
ValueError: 'order' (the number of points used to compute the derivative), must be at least the derivative order 'n' + 1.

换句话说,如果你要计算 n 阶导数,那么你至少需要 n + 1 个点。举个例子,如果你想计算 2 阶导数(n=2),那么你至少需要 2 + 1 = 3 个点。

那怎么解决呢?简单!你只需确保在调用 `derivative` 时,确保 `dx` 的数量大于或等于 `n + 1`。具体来说,你可以这样修改你的代码:
import numpy as np
from scipy.misc import derivative as D

def func_g(x):
    return np.sin(x)

l = []  # 确保你初始化了列表
for i in range(10):
    # 这里我们让 dx 值是固定的,你可以选择更小的 dx,如果你想更精确
    l.append(D(func_g, x0=0, dx=1e-8, n=i + 1, order=i + 2))

print(l)

这里我添加了 `order=i + 2`,这样就确保了每次计算时都有足够的点来计算出相应的高阶导数。

当然了,要记得保证下次在派对前检查客人名单,不然总会遇到这种“价值观”问题。希望这能帮到你!如果还有其他问题,别犹豫,继续问我哦!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-16 00:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表