Sempre sinto que entendo o desenho, mas cada vez que encontro valores complexos, sinto que a ideia não é muito clara. Por exemplo, se quisermos fazer uma numpy.exp(1j * x)
imagem de função , podemos ver que ao x
inserirmos o valor obteremos o complexo Valor numérico. Se usarmos o valor complexo para desenhar diretamente, encontraremos uma mensagem de aviso, o código é o seguinte:
import numpy as np
import matplotlib.pyplot as plt
vertex = np.pi
x = np.linspace(-vertex, vertex, 100)
f = np.exp(1j * x)
plt.figure()
plt.plot(x, f)
plt.show()
"""
ComplexWarning: Casting complex values to real discards the imaginary part
return array(a, dtype, copy=False, order=order)
"""
Podemos ver a mensagem de prompt dizendo que, por estarmos usando números complexos, descartamos automaticamente a parte imaginária e apenas mantemos a parte real. No código acima, podemos np.real()
eliminar essa mensagem de aviso adicionando uma função neste momento . A partir daqui, também podemos concluir que o comando de desenho do módulo matplotlib requer que os parâmetros de entrada sejam números reais .
import numpy as np
import matplotlib.pyplot as plt
vertex = np.pi
x = np.linspace(-vertex, vertex, 100)
f = np.exp(1j * x)
plt.figure()
plt.plot(x, np.real(f))
plt.show()
Neste momento, eliminamos a mensagem de aviso e geramos com sucesso a seguinte imagem.
Não é difícil ver que esta é na verdade uma função cosseno, porque conhecemos a fórmula de Euler:
eix = cos (x) + isin (x) e ^ {ix} = cos (x) + isin (x)eeu x=c o s ( x )+i s i n ( x )
aquicos(x)
está a parte real esin(x)
a parte imaginária, então quando a usamosnp.real(f)
,sin(x)
a parte querealmente removemos, ae^{ix}
funçãoneste momentorealmente se tornacos(x)
. No final, não é difícil perceber que a imagem que realmente obtemos também écos(x)
uma imagem.
Então, como podemos obtere^{ix}
a imagem da função, a resposta é usarnp.abs(f)
. O código é o seguinte:
import numpy as np
import matplotlib.pyplot as plt
vertex = np.pi
x = np.linspace(-vertex, vertex, 100)
f = np.exp(1j * x)
plt.figure()
plt.plot(x, np.abs(f))
plt.show()
Você pode ver que o resultado final que obtivemos é 1
uma linha reta com comportamento constante.Isso é fácil de entender.A e^{ix}
imagem é na verdade um círculo unitário, então seu comprimento, ou seja, o valor é sempre igual 1
. Disto podemos concluir que ao desenhar, se o valor do parâmetro de entrada da imagem for um número complexo, queremos obter a imagem da função original, devemos usar a np.abs()
função para processar o valor do parâmetro de entrada da imagem em vez de usar a np.real()
função.
Se ainda tiver problemas com plurais, você pode continuar a ver este básico de python no plural (hiperlink, clique para pular).
A palavra de código não é fácil, se você achar útil, levante a mão para dar um like e deixe-me recomendá-la para mais pessoas verem ~