我正在学习Python和jupyter中的计算机模拟和建模。 初始人口为100.我需要使用时间步骤8找到人口,直到时间为100.因此,我将初始人口设为p0 = 100.时间步长应为8。
我已导入
from pylab import *
%matplotlib inline
import math
然后我写了一个使用欧拉方法找到人口的函数
def eulerPop():
t = 0
p0 = 100
p = p0
r = 0.1
dt = 8
t_array = [0]
pop_array = [p]
while t < 100:
p += (r * p * dt)
t += dt
#print (p, t)
t_array.append(t)
pop_array.append(p)
return pop_array,t_array
然后我打印了值
print(eulerPop())
得出正确答案如下
([100, 180.0, 324.0, 583.2, 1049.7600000000002, 1889.5680000000004, 3401.2224000000006, 6122.200320000002, 11019.960576000003, 19835.929036800007, 35704.67226624001, 64268.410079232024, 115683.13814261765, 208229.6486567118], [0, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104])
然后我写了另一个函数来找到确切的人口
def exactPop():
p0 = 100
t = 0
dt = 8
r = 0.1
p = p0
t_array = [0]
pop_array = [p]
while t < 100:
p = (p * e ** (0.1 * 8))
t += dt
#print (p, t)
t_array.append(t)
pop_array.append(p)
return pop_array,t_array
然后我打印了结果(我得到了它应该是)
([100, 222.55409284924673, 495.3032424395114, 1102.3176380641598, 2453.253019710934, 5459.815003314422, 12151.041751873483, 27042.64074261525, 60184.503787208174, 133943.0764394417, 298095.79870417266, 663424.400627788, 1476478.156557726, 3285962.567444328], [0, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104])
从这些函数我们得知使用欧拉方法p1 = 180,但确切的人口是222.55409284924673
因此,差异应该给出绝对误差,因为绝对误差=精确 - 来自欧拉方法的人口
但是我无法为绝对错误
创建函数以下代码有什么问题,如何解决?
def absEulerError():
t = 0
p0 = 100
p = p0
r = 0.1
dt = 8
t_array = [0]
pop_array = [p]
ep = p0
while t < 100:
p += ((ep * e ** (0.1 * 8)) - (r * p * dt))
t += dt
#print (p, t)
t_array.append(t)
pop_array.append(p)
return pop_array,t_array
谢谢