如何解决在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
到 {{1} 之间的问题中提到的细节进行积分}}。
我在下面写了一些不起作用的东西:
s=ID
解决方法
也许以下内容与您要查找的内容相似?
一开始,我们可以尝试只象征性地工作。 s
是基本变量。 c
是 s
的函数,在这种情况下写 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)
。
现在,您似乎对 f
从 s
到某个值的 0
的积分感兴趣。我们将该值称为 t
。然后,该积分将是 g
的函数 t
。
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,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,...
这看起来很奇怪。或许哪里有什么误会?还是原来的公式有问题?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。