如何修复从Python和Jupyter中的Euler值和Exact值中查找绝对错误的错误?

时间:2016-11-14 03:13:43

标签: python jupyter-notebook jupyter

我正在学习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

谢谢

0 个答案:

没有答案