scipy 不能对多个运算符求和

xcitsw88  于 2023-05-17  发布在  其他
关注(0)|答案(2)|浏览(323)

我试图做一个模拟,其中包含一个拟合参数m的求和。
例如,如果我加上一个m = 1的值,我可以得到70个和,但如果我加上m = 5。我只会做19个算术题。出现此错误。
TypeError:根据强制转换规则“same_kind”,无法将ufunc“add”输出(类型代码“O”)强制转换为提供的输出参数(类型代码“d”)
代码如下

from scipy.special import factorial2

m = 5

theta = np.linspace(0, 1.5, 100)

def I(n):
    it = 0
    for t in range(n+1):
        it += ((2**t)*(m**t)*(np.cos(theta)**(2*t)))/factorial2(2*t+1)
    return it

Itheta= I(20)

我试着看看错误是否出在阶乘运算符上,但如果你把它从循环中删除,错误仍然存在。

disbfnqx

disbfnqx1#

+=运算符还有另一个怪癖。Be careful with it .跟进我的评论:

from scipy.special import factorial2
import numpy as np

m = 5

theta = np.linspace(0, 1.5, 100)

def I(n):
    it = np.zeros(100)
    for t in range(n+1):
        it = it + ((2**t)*(m**t)*(np.cos(theta)**(2*t)))/factorial2(2*t+1)
    return it

Itheta = I(20)

print(Itheta)

TIO

omhiaaxx

omhiaaxx2#

错误不再以以下方式发生(即不要使用it += ..)。

def I(n):
    it = 0
    for t in range(n+1):
        it = it + ((2**t)*(m**t)*(np.cos(theta)**(2*t)))/factorial2(2*t+1)

    return it

有趣的是,it += ..在使用以下步骤时不会导致错误。

def I(n):
    it = 0
    for t in range(n+1):
        a = 2**t
        b = m**t
        c = np.cos(theta)**(2*t)
        d = factorial2(2*t+1)
        it += a*(b*c)/d

    return it

不幸的是,我真的不能向你解释为什么会这样。

相关问题