函数为不同的参数返回相同的输出值 - python 3.8

Function returning the same output values for diferent parameters - python 3.8

我正在尝试构建一个代码来绘制不同参数的高斯分布,但我遇到了一些问题。我写了这段代码:

from numpy import zeros,empty,array,loadtxt,dot
import numpy as np
from math import log,exp,sin,cos,sqrt,pi,e,sqrt
from pylab import plot,show,ylim,ylabel,xlabel

n=10

#definindo os vetores posição e os vetores f que irão armazenar o valor da função no ponto.

f= zeros(n+1,float)
f1=zeros(n+1,float) 
f2= zeros(n+1,float)
f3= zeros(n+1,float)
x= zeros(n+1,float)

    
#Definindo a função gaussiana
    

def gauss(xi,xf,sig,a):
    step=(xf-xi)/n
    for k in range(n+1):
        f[k]=(1.0/(sqrt(2*pi)*sig))*exp((-(xi+step*k-a)**2)/(2*sig**2))     
        x[k]=xi+step*k
    print(f)
    return f



# A partir de agora iremos chamar a função gauss três vezes para plotar a função para diferentes valores dos parametros

f1=gauss(-5,5,5,0)

f2=gauss(-5,5,2,0)


plot(x,f1)
plot(x,f2)
show()

但是当我绘制函数 f1 和 f2 时,我得到了完全相同的图形。

fx 列表设置为全局列表时存在别名问题。通过调用 plot(x, f2) 时设置它的方式,您实际上是在调用 plot(x, f),因为您在 guass.

中修改 f 的方式

你可以通过运行看到这个:

print('F1: ', f1)
f1 = gauss(-5, 5, 5, 0)
print('F1: ', f1)
print('F == F1: ', np.array_equal(f, f1))
f2 = gauss(-5, 5, 2, 0)
print('F1: ', f1)
print('F == F1: ', np.array_equal(f, f1))
print('F2 == F1: ', np.array_equal(f2, f1))
print('F2 == F: ', np.array_equal(f2, f))

产生

F1:  [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
F1:  [0.04839414 0.05793831 0.06664492 0.07365403 0.07820854 0.07978846
 0.07820854 0.07365403 0.06664492 0.05793831 0.04839414]
F == F1:  True
F1:  [0.00876415 0.02699548 0.0647588  0.12098536 0.17603266 0.19947114
 0.17603266 0.12098536 0.0647588  0.02699548 0.00876415]
F == F1:  True
F2 == F1:  True
F2 == F:  True

通过移动 fx 在您的 guass 函数中初始化并返回两者,您应该得到您期望的结果类型。

from math import exp, pi, sqrt

from numpy import zeros
from pylab import plot, show

n = 10


def gauss(xi, xf, sig, a):
    step = (xf - xi) / n
    f = zeros(n + 1, float)
    x = zeros(n + 1, float)
    for k in range(n + 1):
        f[k] = (1.0 / (sqrt(2 * pi) * sig)) * exp((-(xi + step * k - a) ** 2) / (2 * sig ** 2))
        x[k] = xi + step * k
    return x, f


x1, f1 = gauss(-5, 5, 5, 0)
x2, f2 = gauss(-5, 5, 2, 0)

plot(x1, f1)
show()
plot(x1, f2)
show()