我的数学问题在这里 - https://math.stackexchange.com/questions/2063507/solving-this-integral-involving-ei-function
这与种群动态有关,t =时间,N_t =时间t的种群,r =生长速度,K = cqrrying能力。
我的代码附在下面。
Python无法计算N_next
的值,因为它在指数积分函数scipy.special.expi()
内。我怎么能绕过这个呢?
它现在说" Scipy没有特殊属性"但根据这个 - https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.special.expi.html - 它应该是。
import math
import scipy
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
t_f =100
N_0 = 10
t = []
N_t = [N_0,]
r = 2.5
K = 1000
for i in range(0,100):
scipy.special.expi(r*N_next/K) = i*math.exp(r) + scipy.special.expi(r/K * N_t[i])
N_t.append(N_next)
t.append(i)
plt.plot(t,N_t)
plt.show
答案 0 :(得分:0)
该错误是Python解释的奇特方式:您无法将表达式结果分配给函数调用
>> c
c =
5142.1
339.52
22.417
1.4802
0.097731
0.0064529
0.00042607
2.8132e-05
1.8575e-06
1.2265e-07
8.0979e-09
5.3469e-10
3.5304e-11
2.331e-12
1.5391e-13
1.0162e-14
6.7099e-16
4.4304e-17
2.9253e-18
1.9315e-19
1.2753e-20
8.4205e-22
5.5598e-23
3.671e-24
2.4239e-25
1.6004e-26
1.0567e-27
6.9771e-29
4.6068e-30
3.0418e-31
>> x = A\c
x =
7029.1
653.25
60.709
5.642
0.52434
0.04873
0.0045287
0.00042087
3.9114e-05
3.635e-06
3.3782e-07
3.1395e-08
2.9177e-09
2.7116e-10
2.52e-11
2.342e-12
2.1765e-13
2.0227e-14
1.8798e-15
1.747e-16
1.6236e-17
1.5089e-18
1.4023e-19
1.3033e-20
1.21e-21
1.1339e-22
9.9766e-24
1.1858e-24
2.3902e-26
2.078e-26
也许你在你的例子中混合了这一行?在这种情况下,请编辑您的帖子,以便我们为您提供帮助。
答案 1 :(得分:0)
https://math.stackexchange.com/questions/2063507/solving-this-integral-involving-ei-function中的答案提供了一个公式,您希望为 t 的值序列进行评估。在构建这样的脚本时,我建议你采用自下而上的方法。这是我到目前为止所写的内容。
from numpy import exp
import matplotlib.pyplot as plt
K = 1000
r = 2.5
N_0 = 10
N_t = 50
def Ei(x):
return x
def Ei_inv(x):
return 1/x
def N(t):
return K*Ei_inv(exp(r)*t+Ei(r*N_0/K))/r
t = [_ for _ in range(40)]
N = [N(_) for _ in t]
plt.plot(t,N)
plt.show()
print (N(50))
对我所拥有的内容进行了试用,以验证代码的各个部分是否在一起表现得很礼貌。轮到你,用计算Ei及其倒数所需的任何东西替换虚函数。
答案 2 :(得分:0)
所以,我明白了。嗯,有点。代码现在非常耗费计算量。但它至少可以运作。它在下面。
import math
from scipy import *
from scipy.special import expi
import numpy as np
t_f =100
N_0 = 10
t = [0,]
n = [N_0,]
r = 2.5
K = 100
N_t = [N_0,]
for i in range(0,100):
a= i*math.exp(r) + expi(r/K * N_0)
n.append(a)
t.append(i+1)
g = np.arange(0,1000,0.0001)
d = []
e = []
for i in g:
x = expi(i)
d.append(x)
e.append(i)
for j in range(1,99):
b = n[j]
c = []
for i in g:
c.append(b)
t = np.subtract(d,c)
for i in range(len(t) - 1):
if t[i] == 0. or t[i] * t[i + 1] < 0.:
y = e[i]
print(y)
N_next = math.floor(y*K/r)
N_t.append(N_next)
print(N_t)
plot(t,N_t)