python - 在 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
to之间的问题中提到的带有细节的积分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)
解决方案
也许以下内容与您正在寻找的内容相似?
一开始,我们可以尝试只象征性地工作。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
for的积分感兴趣s
,0
直到某个值。我们称之为 value 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, 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,
...
这看起来很奇怪。也许在某个地方有一些误解?还是原来的公式有错误?
推荐阅读
- c# - 使用 Include 和 ThenInclude 时的 EF Core 引用循环
- azure - 将 Azure 云服务更新到 OS 系列 6
- java - 重复条目:com/google/firebase/iid/zzc.class
- firebase - 在我的应用设置中集成 Google\Firebase 帐户设置
- c# - OPOS CheckHealth 返回 OPOS_EX_NOINPUT (10007),用于 .NET 的 OPOS
- julia - 如何修复 TypeError:在 setindex 中!在微分方程.jl
- java - 当我向文档添加空白页时,当我尝试合并它时出现“resourceDictionary 为空”
- javascript - 将引导程序 4.0.0 alpha 更新到较新版本时导航栏不起作用
- r - 从 igraph 到 ggplot 对象
- javascript - 如何在java脚本中本地保存子节点或父节点