在 python 中编写集成时出现问题

Problem in writing an itegration in python

我有 2 列数组。我还有一个使用 2 列的方程式(积分)。我需要使用两列值来获得整数值。从某种意义上说,对于每个 s 都有 c。 添加第三列,这是基于特定索引号的积分结果作为上限和下限。 例如,查看以下值:

ID=50
s = np.arange(0,100)
c = np.arange(200,300)
lanr=-4.56
lani=-2.33

而我需要解决的整合是c(s) * exp(lanr * s) * sin (lani * s)。现在我的问题是添加第三列,其中包含 0,s[ID] 之间的积分结果,这意味着我需要具有我在 s=0 到 [=17 之间的问题中提到的细节的积分=]. 我在下面写了一些不起作用的东西:

from scipy.integrate import quad
import numpy as np
from sympy import *
def f(s):
    return c*(s) * exp(lanr * s) * sin (lani * s)
integ = []
for i in enumerate(s):
    g = c * np.exp(lanr * s) * np.sin(lani * s)

    integrate( f(s), s,0,ID)

也许以下内容与您正在寻找的内容相似?

一开始,我们可以尝试只做象征性的工作。 s 是基本变量。 cs 的一个函数,在这种情况下写 c = s + 200 使 c 这样一个函数。

f=c*exp(lanr*s)*sin(lani*s)s的一个更复杂的函数。 print(f) 给出 -(s+200)*exp(-4.56*s)*sin(2.33*s).

现在,您似乎对从 0 到某个值的 sf 的积分感兴趣。我们将该值称为 t。然后,该积分将是 t 的函数 g

from sympy import exp, sin, symbols, integrate, lambdify

s, t = symbols('s t')
lanr = -4.56
lani = -2.33
c = s + 200
f = c * exp(lanr * s) * sin (lani * s)
g = integrate(f, (s, 0, t))

如果只需要101个值,我们可以留在sympy里面:

values = [g.subs(t, ti).evalf() for ti in range(0, 101)]

如果需要更多的数值计算,lambdify()可以将g从sympy转换为numpy。 然后 numpy 还可以计算前 101 个值(这比在 sympy 中工作得快得多,但这只有在需要更多计算时才重要):

g_np = lambdify(t, g)

import  numpy as np

x = np.arange(0,100)
y = g_np(x)

在这种情况下,结果将是

array([  0.        , -17.66531171, -17.80584637, -17.80185932,
       -17.8019015 , -17.80190133, -17.80190133, -17.80190133,
       -17.80190133, -17.80190133, -17.80190133, -17.80190133,
       -17.80190133, -17.80190133, -17.80190133, -17.80190133,
       ...

这看起来很奇怪。也许某处有误会?还是原来的公式有误?