问题计算总和

时间:2019-05-02 18:43:01

标签: python

我正在尝试将总和作为类分配的一部分来开发梯度方法的代码。求和是我需要找出最小值的目标函数。计算总和时,我收到此错误“ RuntimeWarning:在double_scalars y = y + (-0.01*i + exp(-(1/x1)*((u - x2)**x3))**2)中遇到无效的值”。

为什么会这样?我该如何解决?

from sympy import *
from numpy import *
x1 = 1
x2 = 50
x3 = 1
def f(x1,x2,x3): 
    y = 0
    for i in range(1,100):
        u = (25+(-50*log(0.01*i))**(2/3))
        print(u)
        y = y + (-0.01*i + exp(-(1/x1)*((u - x2)**x3))**2)


        print(f'y{i} : {y}')
    return y

y1 = f(25,50,1.25)
y2 = f(26,51,2.25)


print(f'y1: {y1}')
print(f'y2: {y2}')

2 个答案:

答案 0 :(得分:0)

您需要在u中进行强制转换,请参阅:

u = float((25+(-50*log(0.01*i))**(2/3)))

答案 1 :(得分:0)

经过几次循环后,您尝试将负数提高为非整数幂。在警告您有$ groovy -v Groovy Version: 2.4.11 JVM: 1.8.0_191 Vendor: Oracle Corporation OS: Linux (u - x2) = -0.6175251618426216之前,我添加了一些打印语句以查明问题所在。将负数提高到小数幂将得到一个复数,因此numpy假设您不需要该数,因此抛出警告并返回x3 = 1.25。您可以通过将其中一种输入类型强制转换为None来告诉numpy使用复数:

complex

这将给出复数形式的结果,您需要与您的理论核实如何处理(可能是通过取振幅或实部)。