Topic: come stampare un funzione complessa in uno spazio 3d  (Letto 218 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline sibelius

  • python unicellularis
  • *
  • Post: 26
  • Punti reputazione: 0
  • Gutta cavat lapidem
    • Mostra profilo
    • mangiando ciambelle
Salve a tutti
ho scritto un codice che stampa una funzione complessa su una griglia di punti complessi; vorrei poterla stampare in una vista 3d; nel mio caso la funzione genera un piano.
Grazie in anticipo.
ciao
import numpy as np
import cmath
x=np.array([0,1,2,3], dtype=complex)
y=np.array([0,1,2,3], dtype=complex)
xx,yy=np.meshgrid(x,y)
def f(x,y):
    return x.real
k=plt.contourf(x,y,f(xx,yy))

Offline nuzzopippo

  • python neanderthalensis
  • ****
  • Post: 258
  • Punti reputazione: 0
    • Mostra profilo
Re:come stampare un funzione complessa in uno spazio 3d
« Risposta #1 il: Marzo 30, 2020, 14:43 »
... vorrei poterla stampare in una vista 3d; nel mio caso la funzione genera...

Casistica a me non familiare ma mi son ricordato di aver letto di questa libreria che contiene anche un toolkit per il 3D, vedi un po' se Ti è utile.

Ciao :)

Offline sibelius

  • python unicellularis
  • *
  • Post: 26
  • Punti reputazione: 0
  • Gutta cavat lapidem
    • Mostra profilo
    • mangiando ciambelle
Re:come stampare un funzione complessa in uno spazio 3d
« Risposta #2 il: Marzo 31, 2020, 04:28 »
Grazie della risposta provero' a darci un'occhiata.
ciao.
PS e' la libreria che ho usato ma gli esempi riguardano funzioni reali di variabile reale, non riesco a trovare nulla che riguarda la variabile complessa.
comunque grazie lo stesso.
ciao.
« Ultima modifica: Marzo 31, 2020, 04:32 da sibelius »

Offline nuzzopippo

  • python neanderthalensis
  • ****
  • Post: 258
  • Punti reputazione: 0
    • Mostra profilo
Re:come stampare un funzione complessa in uno spazio 3d
« Risposta #3 il: Marzo 31, 2020, 06:42 »
Prova a guardare qui se Ti è utile

Offline sibelius

  • python unicellularis
  • *
  • Post: 26
  • Punti reputazione: 0
  • Gutta cavat lapidem
    • Mostra profilo
    • mangiando ciambelle
Re:come stampare un funzione complessa in uno spazio 3d
« Risposta #4 il: Marzo 31, 2020, 07:55 »
Grazie ancora.
Sono riuscito parzialmente a fare un passo avanti.
Il passo avanti e' stato quello di poter creare la griglia con I pallini che individuano dei punti.
Un passo successivo sarebbe quello di collegare i punti e vedere la griglia, ci sto lavorando.
Vorrei pero' spiegare cosa sto cercando di fare.
Lo scopo ultimo e' quello di creare una griglia che identifica dei punti I quali corrispondono a numeri complessi, in pratica e' una discretizzazione del piano dei numeri complessi, mi piacerebbe che questi punti siano connessi a delle linee a formare la griglia (cosa che non vedo nel mio codice; vedo solo I punti ma non le linee).
Ora una volta fatto questo, supponiamo di voler valutare su questa griglia una funzione complessa; ossia una funzione che riceve come argomento un numero complesso e restituisce un numero complesso) , otterro' in corrispondenza di ogni numero complesso della griglia un numero complesso che gli corrisponde.
A questo punto il passo successivo e' la rappresentazione grafica.
Nella rappresentazione grafica classica di cui puoi vedere diversi esempi nel link che hai postato, si rappresenta in uno spazio 3d o la parte reale dei valori che la funzione assume oppure la parte immaginaria; quindi ho una rappresentazione in cui uno spazio RxR va su uno spazio R.
La rappresentazione grafica che invece vorrei ottenere e'  la seguente:
una volta che faccio la valutazione della mia funzione complessa sui punti vorrei poter mettere questi nuovi punti nello stesso spazio della griglia (se ci stanno).
Faccio un esempio supponiamo di prendere la griglia che scaturisce dal codice qui postato; essa corrisponde ai numeri complessi
0+j0;   0+j1;  0+j2;
1+j0;  1+j1;  1+j2;
2+j0;  2+j1;  2+j2;

ora prendiamo come funzione complessa su questi numeri la funzione t(z) = 2*z che mi fornisce i seguenti numeri complessi:
0+j0;   0+j2;  0+j4;
2+j0;  2+j2;  2+j4;
4+j0;  4+j2;  4+j4;

se ora riporto questi punti sulla griglia di prima (vanno fuori dalla griglia, ma si puo' sempre partire con una griglia di base molto piu' grande) ti sarai accorto che questa funzione t(z) altro non fa che spostare i punti della griglia iniziale nella posizione di una nuova griglia.
Mi piacerebbe vedere le due griglie sovrapposte.
Ora se riesco ad unire i punti della griglia iniziale a quelli della griglia finale a due a due sono quasi a meta' dell'opera.       
ecco qui il codice aggiornato
ciao
#disegno la griglia

import numpy as np
x=np.array([0,1,2])
y=np.array([0,1,2])
xx,yy=np.meshgrid(x,y)
plt.scatter(xx,yy,s=200,c="b",marker=".",cmap="jet",norm=1,vmin=None,vmax=None,alpha=1,linewidths=None,edgecolors="face",plotnonfinite=False,data=None)

Offline sibelius

  • python unicellularis
  • *
  • Post: 26
  • Punti reputazione: 0
  • Gutta cavat lapidem
    • Mostra profilo
    • mangiando ciambelle
Re:come stampare un funzione complessa in uno spazio 3d
« Risposta #5 il: Aprile 01, 2020, 12:48 »
Salve a tutti.
Grazie Nuzzopippo per l'aiuto.
Sono sulla buona strada, il codice che posto ora funziona e fa quello che voglio (e' che non e' quello con cui ho aperto il posto; quello era un obbiettivo intermedio).
Il codice va sicuramente migliorato.
Una miglioria che voglio realizzare e' quella di creare una "deformazione della griglia" che segua il movimento dei punti rossi.
Se c'e' qualche matematico o fisico nel radar vorrei poter avere una visuale di come si deforma lo spazio in relazione alla trasformata che sto considerando.
lascio qui il codice.
ciao a tutti.
PS il codice su jupyter notebook mostra correttamente il grafico; sulla consolle python mi mostra solo la prima serie di punti e non la seconda, non so perche', se qualcuno conosce una scorciatoia sarebbe un aiuto.
import numpy as np
import matplotlib.pyplot as plt
import scipy
import cmath
import math
x=np.array([0,1,2,3], dtype=complex)
y=np.array([0,1,2,3], dtype=complex)
xx,yy=np.meshgrid(x,y)


fig=plt.figure()
ax1=fig.add_subplot()

ax1.grid(b=True,which="both",axis="both",color="black",linestyle="-",linewidth=1)
ax1.scatter(xx,yy,s=150,c="black",marker=".",cmap="jet",norm=1,vmin=None,vmax=None,alpha=1,linewidths=None,edgecolors="face",plotnonfinite=False,data=None)
#plt.grid(b=True,which="both",axis="both",color="black",linestyle="-",linewidth=1)
#dopo aver creato la griglia devo valutare la funzione nei punti z
n=4
m=4
real_z=[]
imag_z=[]
for i in range (n):
     for w in range (m):
            real_z.append(i)
            imag_z.append(w) 
###           
real_z_v=np.array(real_z)
imag_z_v=np.array(imag_z)
z=real_z_v+1j*imag_z_v
sin_v=np.vectorize(cmath.sin)
 ###
ax1.scatter(sin_v(z).real,sin_v(z).imag,s=150,c="r",marker=".",cmap="jet",norm=1,vmin=None,vmax=None,alpha=1,linewidths=None,edgecolors="face",plotnonfinite=False,data=None)
#plt.grid(b=True,which="both",axis="both",color="black",linestyle="-",linewidth=1)
plt.show()
#ax1.figure.show()
« Ultima modifica: Aprile 01, 2020, 13:53 da sibelius »