首页 > 解决方案 > 在 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=0to之间的问题中提到的带有细节的积分s=ID。我在下面写了一些不起作用的东西:

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)

标签: pythonnumpyscipysympy

解决方案


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

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

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

现在,您似乎对ffor的积分感兴趣s0直到某个值。我们称之为 value t。那么,该积分将是 的函数gt

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,
       ...

这看起来很奇怪。也许在某个地方有一些误解?还是原来的公式有错误?


推荐阅读