matplotlib图显示不必要的对角线

时间:2020-07-02 21:02:14

标签: python python-3.x matplotlib

因此,我尝试使用欧拉方法绘制方程的近似值,并且它起作用了,唯一的问题是,当我使用符号绘制{时,该图显示了从第一个点到最后一个点的对角线{1}},该行不见了,但我需要连续的行。

'<'

运行下一个图时,会出现对角线

from decimal import *
#The Decimals are so that x is precise
from matplotlib import pyplot as pyplot

#Creates a range but with floats
def rangoFloat(m,maximo,cre): 
    minimo=Decimal(m)
    n=str(cre)
    while minimo <= maximo:
        yield float(minimo)
        minimo += Decimal(n)

#Substracs xn and delta
def ant(xn,delta): 
    return (float(Decimal(xn)-Decimal(delta)))


#Main function
def Teuler(x0,y0,A,B,cre=0.1,limite=20,delta=5,arr=([],[])): 
    y1=float(y0)
    arr[0].append(x0)
    arr[1].append(y0)
    for i in rangoFloat(ant(x0,-cre),limite,cre):

        arr[0].append(i)
        y1=float(Decimal(y1) * (Decimal(1) + Decimal(cre) * Decimal(A) - Decimal(cre) * Decimal(B)))
        arr[1].append(y1)
        
    return arr

我正在使用python 3.7

1 个答案:

答案 0 :(得分:1)

发生此问题是因为您使用可变类型作为默认参数(([],[]))。发生的情况是,每个新函数Teuler调用都重复使用相同的数组。您可以通过在print的开头添加Teuler语句来看到它:

print('arr length: ', len(arr[0]), len(arr[0]))

调用后:

t1=Teuler(0, 1, 0.1, 0.16524,0.1,240)
t01 = Teuler(0, 1, 0.1, 0.16524,0.1,240)
t001=Teuler(0, 1, 0.1, 0.16524,0.01,240)
t0005= Teuler(0, 1, 0.1, 0.16524,0.0005,240)
arr length:  0 0
arr length:  2400 2400
arr length:  4800 4800
arr length:  28800 28800

因此,您的t...数组从多次开始,这就是对角线的证明。 您需要做的是是将可变类显式传递为参数,还是更改代码以防止数组重用,例如:

#Main function
def Teuler(x0,y0,A,B,cre=0.1,limite=20,delta=5,arr=None):
    if arr is None:
        arr = ([],[])

如需进一步阅读,可以推荐Python Anti-Patterns