返回

python-无法用 sympy 计算任何浮点数的导数

发布时间:2022-08-14 01:34:35 1530
# node.js

我敢肯定,一旦我发布了这篇文章,我就会参考关于这个问题的每一个 StackOverflow 问题,但是从我所有的挖掘中,我发誓我找不到这个问题的答案。

我似乎无法让 sympydiff()工作。它要么拒绝实际尝试区分表达式,要么吐出那个Cant calculate derivative wrt错误。

到目前为止我的代码:

x = np.arange(0, np.pi * 2, 0.1)

slope = diff(np.cos(x), x)

(我想指出我有比这更多的代码,但我已将其隔离为问题部分。另外,是的,我确实导入并加载了这两个库)

当我运行那个位时,它会抛出一个Cant calculate derivative wrt 1.00000000000000. 所以我的下一个想法是“也许它试图计算关于变量值的导数,而不是实际变量本身”,所以我删除了这个x = np.arange(0, np.pi * 2, 0.1)位,但当然 python 说这个变量是未定义的。所以,我只是给了它一个单一的值 0,但是它说First variable cannot be a number: 0(是的,如果我改变这个值,它只会改变错误中给出的值)。

所以作为最后的尝试,我决定尝试slope = diff(np.cos(x), 'x'),而且令人惊讶的是,这似乎奏效了。但是当我试图让它显示“斜率”实际上等于什么时,它只是说 0,这显然是不正确的。

所以在这一点上,我不知道该怎么办。我花了大约 5 个小时在网上搜索。所有的文档和教程都表明我写得都正确,但这显然不是真的。我不知道我在这里做错了什么。请帮助我,或建议任何其他获取衍生品的方法(最好是象征性的)。

编辑:我实现了 Oscar 的提示,它适用于我设置的测试部分,但是一旦我开始将它与我的代码集成,它再次崩溃,这一次导致'ImmutableDenseNDimArray' object has no attribute 'as_coefficient'错误。

我的代码:

x=np.arange(-np.pi,np.pi,0.01)

n = 127

for i in np.arange(0,n):

  an = quad(fc,-np.pi,np.pi)[0] * (1.0/np.pi)

  An.append(an)

for i in np.arange(0,n):

  bn=quad(fs,-np.pi,np.pi)[0]*(1.0/np.pi)

  Bn.append(bn) #putting value in array Bn

for i in np.arange(0,n):

  if i==0.0:

    symsum += f'An[{i}] / 2'

  else:

    symsum += f' + (An[{i}] * cos({i} * x) + Bn[{i}] * sin({i} * x))'

print(symsum)

sumf = lambda x: eval(symsum)

sum = sumf(x) #<--error here

ranger = x

x = Symbol('x')

dersymsum = f'{diff(eval(symsum), x)}'

print(dersymsum)

我的测试表明,在 lambda 函数中评估字符串确实会产生一个可行的函数,我通常可以使用相同的np.arange函数在相同的-np.pito范围内评估 x 的np.pi范围。此外,如果我删除 symsum 到 sum 部分的转换,并且只评估导数,它就可以工作,但是如果我把部分放回去,但在推导发生后评估它,通过“ranger”而不是“x” ,它返回相同的错误。很抱歉打扰你们,但我不知道该怎么办。在我看来,没有 np 函数正在评估该函数(因为np.arange应该只指它所做的范围)

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(1)
按点赞数排序
用户头像