函数为不同的参数返回相同的输出值 - 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 时,我得到了完全相同的图形。
将 f
和 x
列表设置为全局列表时存在别名问题。通过调用 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
通过移动 f
和 x
在您的 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()
我正在尝试构建一个代码来绘制不同参数的高斯分布,但我遇到了一些问题。我写了这段代码:
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 时,我得到了完全相同的图形。
将 f
和 x
列表设置为全局列表时存在别名问题。通过调用 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
通过移动 f
和 x
在您的 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()