Classi utili a definire una serie di sistemi di riferimento ed i morfismi per trasformare le loro coordinate.
Project description
README
Sistemi di riferimento
Sommario
-
Descrizione:
Le classi SysReference, Parametrization e LinearTransform permettono di definire una serie di sistemi di riferimento e le parametrizzazioni o le trasformazioni lineari per passare da un sistema all'altro. SysReference utilizza la classe Dimension per definire i propri assi coordinati e per ciascuno mette a disposizione un iteratore definito tramite la classe DimIterator per muovere la posizione sulla dimensione da un valore minimo ad uno massimo tramite incrementi predefiniti o creare differenti iteratori. Parametrization e LinearTransform si estendono la classe BaseTransForm che defisce il sistema di riferimento che rappresenta lo spazio dominio della funzione ed il sistema di riferimento che rappresenta lo spazio immagine.
Setup
-
Installazione:
pip3 install ReferenceSystem-busnellistefano
-
Utilizzo:
import numpy as np import referencesystem as rs
-
Classii principali:
** SysReference
Permette di definire un sistema di riferimento specificando il numero do dimensioni ed eventualmente assegnando a ciascuna un nome.
import numpy as np import referencesystem as rs P = rs.SysReference( 2, "Polar", ["r","t"] ) P.dimension[1].set( dl=[ 0.0, 2*np.pi ], dd= np.pi * ( 1.0 / 180.0 ) ) C = rs.SysReference( 2, "Cartesian", ["x","y"] ) Z = rs.SysReference( 2, "Cartesian", ["u","v"] )
** Parametrization
Permette di definire una funzione che parametrizza un sistama di riferimento sulla base di un altro. Sono previsti metodi per definire tramite funzioni lambda il vettore posizione, lo spazio tangente, la metrica, i coefficienti di connessione affine e l'accelerazione della geodetica. Per ciascuno di questi è previsto un metodo che esegue tale funzione prendendo in ingresso un vettore dello spazio del dominio della funzione restituendo un vettore una matrice nella base dello spazio immagine. Per poter utilizzare get_position_vector è necessario definire set_position_vector Per poter utilizzare get_metric è necessario definire set_tangent_space ( o set_metric ) Per poter utilizzare get_christoffel e get_geodesic è necessario definire set_hessian ( o set_christoffel e set_geodesic )
F = rs.Parametrization( P, C )
F.set_position_vector( lambda v_pos: np.array( [ ( v_pos[ 0 ] * np.cos( v_pos[ 1 ] ) ), # x = Fx( r, t ) ( v_pos[ 0 ] * np.sin( v_pos[ 1 ] ) ) # y = Fy( r, t ) ] ) )
F.set_tangent_space( lambda v_pos: np.array( [ [ ( 1.0 * np.cos( v_pos[ 1 ] ) ), # xr = d/dr Fx( r, t ) ( 1.0 * np.sin( v_pos[ 1 ] ) ) # yr = d/dr Fy( r, t ) ], [ ( - v_pos[ 0 ] * np.sin( v_pos[ 1 ] ) ), # xt = d/dt Fx( r, t ) ( v_pos[ 0 ] * np.cos( v_pos[ 1 ] ) ) # yt = d/dt Fx( r, t ) ] ] ) )
F.set_hessian( lambda v_pos: np.array( [ [ [ 0, # d/dr xr 0 # d/dr yr ], [ - np.sin( v_pos[ 1 ] ), # d/dt xr np.cos( v_pos[ 1 ] ) # d/dt yr ]
], [ [ - np.sin( v_pos[ 1 ] ), # d/dr xt np.cos( v_pos[ 1 ] ) # d/dr yt ], [ - v_pos[ 0 ] * np.cos( v_pos[ 1 ] ), # d/dt xt - v_pos[ 0 ] * np.sin( v_pos[ 1 ] ) # d/dt yt ]
] ] ) )F.get_position_vector( np.array( [ 1.0, np.pi/3 ] ) ) array([ 0.5 , 0.8660254])
F.get_tangent_space( np.array( [ 1.0, np.pi/3 ] ) ) array([[ 0.5 , 0.8660254], [-0.8660254, 0.5 ]])
F.get_metric( np.array( [ 1.0, np.pi/3 ] ) ) array([[ 1., 0.], [ 0., 1.]])
F.get_christoffel( np.array( [ 1.0, np.pi/3 ] ) ) array([[[ 0., 0.], [ 0., -1.]],
[[ 0., 1.], [ 1., 0.]]])F.get_geodesic( np.array( [ 1.0, np.pi/3 ] ), np.array( [ 1.0, 0.0 ] ) ) array([ 0., 0.])
** LinearTransform
Permette di definire una trasformazione lineare tra uno spazio dominio ed uno spazio immagine. Il metodo set_matrix imposta funzione lambda che definisce la trasformazione lineare mentre il metodo get_matrix esegue la funzione prendendo in ingresso un vettore contenente i parametri della funzione e restituisce una matrice che trasforma i vettori dello spazio del dominio nei vettori dello spazio immagine.
T = rs.LinearTransform( C, Z ) T.set_matrix( lambda v_par: np.array( [ [ np.cos( v_par[0] ), -np.sin( v_par[0] ) ], [ np.sin( v_par[0] ), np.cos( v_par[0] ) ] ] ), 1 )
M = T.get_matrix( np.array( [ np.pi/3 ] ) )
M array([[ 0.5 , -0.8660254], [ 0.8660254, 0.5 ]])
V = np.array( [ np.sqrt(3)/3, 0.5 ] ) W = np.dot( M, V ) ) "( {0:8.5f}, {1:8.5f} )".format( W[0], W[1] ) '( 0.00000, 1.00000 )'
Repository
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ReferenceSystem_busnellistefano-1.0.0-py3-none-any.whl.
File metadata
- Download URL: ReferenceSystem_busnellistefano-1.0.0-py3-none-any.whl
- Upload date:
- Size: 8.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.8.0 pkginfo/1.10.0 readme-renderer/34.0 requests/2.27.1 requests-toolbelt/1.0.0 urllib3/1.26.20 tqdm/4.64.1 importlib-metadata/4.8.3 keyring/23.4.1 rfc3986/1.5.0 colorama/0.4.5 CPython/3.6.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9b4e16c39b4fdafd756f2d7b40b06725d284cf613f2144cdfd721721a78b4a89
|
|
| MD5 |
7d009ad358d69b70d2b64e097c08a3a0
|
|
| BLAKE2b-256 |
40f5dc8ecc420907b17888c31ebd155ff1512b9aa09faf00742bac68be930ab1
|