Aggiornato l'11 settembre 2010 e ritoccato il 7 gennaio 2015.
Ho usato solo caratteri UNICODE
La trasformazione di Lorentz è uno degli attrezzi fondamentali
per effettuare calcoli di cinematica e dinamica relativistica e pertanto
richiede particolare approfondimento della sua struttura e
delle sue proprietà.
In letteratura si trova spesso definita in funzione
delle componenti della velocità della particella calcolata in
base al tempo dell'osservatore ( dal punto di vista relativistico NON
costituiscono un vettore ! ). Viceversa, a mio parere, è molto meglio
usare come parametri le componenti spaziali della velocità della particella espressa in
funzione del tempo proprio della particella
( con la velocità del tempo dell'osservatore in
funzione del tempo proprio della particella costituiscono
un ortodosso quadrivettore ).
Passerò dunque in rassegna
alcune delle varie possibili definizioni della matrice di trasformazione...
Trasformazioni di Lorentz
Metrica pseudoeuclidea nel SI, assumendo ç = 299792458 [m/s].
Tensore
metrico covariante ( pedici sottolineati ):
gik
|
=
|
┌ │ │ │ │ │ └ |
ç2
|
0
|
0
|
0
| ┐ │ │ │ │ │ ┘ |
0
|
−1
|
0
|
0
|
0
|
0
|
−1
|
0
|
0
|
0
|
0
|
−1
|
|
Tensore metrico controvariante ( pedici non sottolineati,
per tradizione andrebbero scritti in alto ):
gik
|
=
|
┌ │ │ │ │ │ │ └ |
1ç2
|
0
|
0
|
0
| ┐ │ │ │ │ │ │ ┘ |
0
|
−1
|
0
|
0
|
0
|
0
|
−1
|
0
|
0
|
0
|
0
|
−1
|
|
Ogni vettore quadrivelocità ha qnorma (norma quadratica)
ç2.
Se uh è un generico vettore velocità controvariante
( dunque pedice non sottolineato), le sue componenti
sono date dall'espressione:
uh =
[ ( w2·(
ux2 +
uy2 +
uz2 )
+ ç2
)½ç,
w·ux,
w·uy,
w·uz]
Se pertanto la particella è ferma (
w = 0 ) la sua quadrivelocità
controvariante vale [1,0,0,0] ( e dunque la corrispondente
velocità covariante, ossia
uh, di scarso interesse
pratico, vale
[
ç2, 0, 0, 0 ] ).
La trasformazione di Lorentz basata sulle componenti
direzionali della quadrivelocità
ux,
uy e
uz e del fattore di scala
w,
è rappresentata dalla seguente matrice:
[1]
p = ç2 + ç·(
w2·(
ux2 +
uy2 +
uz2 ) +
ç2 )½
Il quadrato della matrice di trasformazione, nel caso in cui si
ponga w = 1 si ottiene ponendo:
wq = 2·( 1 + (
ux2 +
uy2 +
uz2 ) /
ç2 )½
La radice quadrata della matrice di trasformazione rispetto
a quella in cui si ponga w = 1 si ottiene ponendo:
wsq = 1 / ( 2·( 1 + (
ux2 +
uy2 +
uz2 ) /
ç2 )½ + 2 )½
Un modo forse migliore di definire la matrice di Lorentz
è quello di usare quantità adimensionali per definire le
componenti spaziali del quadrivettore fermato dalla
trasformazione.
Si ponga:
[2]
bx = ux ç ;
by = uy ç ;
bz = uz ç
d = 11 + ( 1 + w2·(
bx2 +
by2 +
bz2 ) )½
L(
bx,
by,
bz, w )
|
=
|
┌ │ │ │ │ │ │ │ │ └ |
1 d
− 1
|
−
w·bxç
|
−
w·byç
|
−
w·bzç
| ┐ │ │ │ │ │ │ │ │ ┘ |
−ç·w·bx
|
d·(
w·bx )2
+ 1
|
d·w2·bx·by
|
d·w2·bx·bz
|
−ç·w·by
|
d·w2·bx·by
|
d·(
w·by )2
+ 1
|
d·w2·by·bz
|
−ç·w·bz
|
d·w2·bx·bz
|
d·w2·by·bz
|
d·(
w·bz )2
+ 1
|
|
uh =
[ ( 1 + w2·(
bx2 +
by2 +
bz2 ) )½
,
ç·w·bx,
ç·w·by,
ç·w·bz ]
Per ottenere la trasformazione quadrata e radice quadrata rispetto a
quella in cui si assume w = 1 bisogna usare i seguenti
valori:
wq = 2·( 1 +
bx2 +
by2 +
bz2
)½
wsq = 1 / ( 2·( 1 +
bx2 +
by2 +
bz2
)½ + 2 )½
Per effettuare verifiche numeriche suggerisco di usare i
seguenti valori che producono espressioni esenti
da radici quadrate:
bx |
by |
bz |
4 |
4 |
4 |
76/128 |
95/128 |
152/128 |
66/512 |
165/512 |
198/512 |
Uso di funzioni trigonometriche iperboliche
Usando le funzioni trigonometriche iperboliche ossia il
coseno iperbolico :
cosh(w) = ( ew + 1/ew )/2
ed il seno iperbolico :
sinh(w) = ( ew − 1/ew )/2
si ottiene una espressione della matrice da cui è immediatamente
deducibile una sua qualsiasi potenza, quadrato e radice
quadrata inclusa.
Il solo difetto di questa formulazione è il fatto che Maxima ha
qualche problema a gestire le semplificazioni delle funzioni
trigonometriche iperboliche ma questo nulla toglie alla
utilità delle seguenti formule.
[3]
Va notato che in questa formula le grandezze
bx,
by,
bz sono definite a meno di
un fattore moltiplicativo arbitrario. Possono dunque essere
considerate coincidenti con quelle date in precedenza
o desumibili nel modo specificato in seguito...
Il quadrato della matrice si ottiene semplicemente usando
2·w in luogo di w mentre la radice
quadrata della matrice si ottiene usando w/2
in luogo di w.
Il vettore quadrivelocità, in forma controvariante, fermato dalla trasformazione
assume questa espressione:
U =
[ ut,
ux,
uy,
uz ]
=
[ cosh(w),
ç·bx·sinh(w)(bx2+by2+bz2)½ ,
ç·by·sinh(w)(bx2+by2+bz2)½ ,
ç·bz·sinh(w)(bx2+by2+bz2)½ ]
ur =
( ux2+
uy2+
uz2 )½
w = log(( ur +
( ur2 +
ç2)½ ) /ç)
Le tre componenti della velocità ordinaria possono essere espresse usando
la tangente iperbolica ossia tanh(w) = ( e2·w − 1 )/(
e2·w + 1 ) in questo modo:
V =
[ vx,
vy,
vz ]
=
[
ç·bx·tanh(w)(bx2+by2+bz2)½ ,
ç·by·tanh(w)(bx2+by2+bz2)½ ,
ç·bz·tanh(w)(bx2+by2+bz2)½ ]
vr =
( vx2+
vy2+
vz2 )½
w = log(( ç + vr )/(
ç − vr))/2
bx =
ux / ur =
vx / vr ;
by =
uy / ur =
vy / vr ;
bz =
uz / ur =
vz / vr
βr =
vr / ç ;
βx =
vx / ç ;
βy =
vx / ç ;
βz =
vz / ç
w = log(( 1 + βr )/(
( 1 − βr ))/2
Per aggirare le difficoltà di verifica delle formule con Maxima è a volte
utile fare verifiche numeriche. Maxima gestisce in modo esatto i numeri
razionali per cui è utile disporre delle componente di versori di
prova definibili in modo esatto con espressioni razionali. La norna
euclidea dei seguenti vettori vale 1 per cui, in 3 dimensioni, sono dei versori...
Alcuni versori tridimensionali razionali ( la somma dei loro quadrati vale 1 )
1/3 | 2/3 | 2/3 |
2/7 | 3/7 | 6/7 |
3/13 | 4/13 | 12/13 |
12/25 | 15/25 | 16/25 |
3/125 | 80/125 | 96/125 |
24/125 | 80/125 | 93/125 |
28/125 | 75/125 | 96/125 |
35/125 | 72/125 | 96/125 |
53/125 | 60/125 | 96/125 |
Versione semplificata per l'uso di dati solo razionali
In pratica usa lo schema della variante [2]
[4]
Lzr(bx, by, bz, w )
|
=
|
┌ │ │ │ │ │ │ │ │ │ └ |
1 + cm
|
−
sh·bxç
|
−
sh·byç
|
−
sh·bzç
| ┐ │ │ │ │ │ │ │ │ │ ┘ |
− ç·sh·bx
|
1 + cm·bx2
|
cm·bx·by
|
cm·bx·bz
|
− ç·sh·by
|
cm·bx·by
|
1 + cm·by2
|
cm·by·bz
|
− ç·sh·bz
|
cm·bx·bz
|
cm·by·bz
|
1 + cm·bz2
|
|
| |
w > 0
|
| |
cm =
1 2
·( w +
1 w
) − 1
|
| |
sh =
1 2
·( w −
1 w
)
|
Dove viene imposto il seguente vincolo che impone il calcolo
di una radice quadrata per normalizzare per prudenza i dati di ingresso :
bx2 +
by2 +
bz2
= 1
Oppure ( e MOLTO MEGLIO ) vengono usati due parametri di natura
angolare per definire i tre coefficienti spaziali:
bx =
2·h·(
1 − f 2 )
( 1 + h 2 )·(
1 + f 2 )
by =
4·h·f
( 1 + h 2 )·(
1 + f 2 )
bz =
1 − h 2
1 + h 2
Formule in maximese
Maxima rappresenta un ottimo programma gratuito per fare
calcolo simbolico. Purtroppo ha i suoi limiti di capacità di
semplificazione delle espressioni per cui le formule qui proposte
tengono in qualche modo in conto l'usabilità delle formule
definite nel linguaggio di Maxima che scherzosamente chiamo
maximese.
Quadrivelocità
Vettore u1 in funzione dei parametri
w,ux,uy,uz:
u1:[sqrt(w^2*(ux^2+uy^2+uz^2)+ç^2)/ç,
w*ux,w*uy,w*uz];
Per evitare che Maxima si preoccupi del fatto che ç possa essere
negativo definisco il simbolo § come radice quarta di ç
ossia
§ = 131.5846336684494782
ç = § 4
Espressione [1]
Con queste istruzioni costruisco la matrice e il
vettore fermato dalla trasformazione usando
§ piuttosto che ç.
fp1:§^8+§^4*sqrt(§^8+w^2*(ux^2+uy^2+uz^2));
lz:matrix([fp/§^8-1,-ux*w/§^8,-uy*w/§^8,-uz*w/§^8],
[-ux*w,(ux*w)^2/fp+1,ux*uy*w^2/fp,ux*uz*w^2/fp],
[-uy*w,ux*uy*w^2/fp,(uy*w)^2/fp+1,uy*uz*w^2/fp],
[-uz*w,ux*uz*w^2/fp,uy*uz*w^2/fp,(uz*w)^2/fp+1]);
lz1:ratsimp(ev(lz,fp=fp1));
u1:ratsimp(ev([fp/§^8-1,w*ux,w*uy,w*uz],fp=fp1));
Per la trasformazione doppia ossia quadratica
devo porre w = wq con:
wq:2*sqrt(1+(ux^2+uy^2+uz^2)/§^8);
Per la trasformazione dimezzata ossia radice
quadrata devo porre w = wsq con:
wsq:1/sqrt(2*sqrt(1+(ux^2+uy^2+uz^2)/§^8)+2);
Per ottenere il vettore fermato dalla trasformazione
raddoppiata uso questa funzione:
raddoppiolz(u):=block([v],
v:[0,2*u[1]*u[2],2*u[1]*u[3],2*u[1]*u[4]],
v[1]:sqrt(1+(v[2]^2+v[3]^2+v[4]^2)/§^8),
radcan(v));
Notare che radcan(...) è una funzione
disponibile in Maxima per semplificare radicali
con maggiore efficienza di ratsimp(...)
Per ottenere il vettore fermato dalla trasformazione
dimezzata uso questa funzione:
dimezzolz(u):=block([qt],
qt:sqrt(2*u[1]+2),
radcan([qt/2,u[2]/qt,u[3]/qt,u[4]/qt]));
Espressione [2]
Utilizzo bx,by e bz adimensionali...
qq:1/(1+sqrt(1+(bx^2+by^2+bz^2)*s^2));
lz:matrix(
[1/q-1,-(s*bx)/ç,-(s*by)/ç,-(s*bz)/ç],
[-s*bx*ç,q*s^2*bx^2+1,q*s^2*bx*by,q*s^2*bx*bz],
[-s*by*ç,q*s^2*bx*by,q*s^2*by^2+1,q*s^2*by*bz],
[-s*bz*ç,q*s^2*bx*bz,q*s^2*by*bz,q*s^2*bz^2+1]);
lzqq:ev(lz,q=qq);
u:[sqrt(1+s^2*(bx^2+by^2+bz^2)),s*bx*ç,s*by*ç,s*bz*ç];
Per ottenere la matrice quadrata va posto:
squad:2*sqrt(1+bx^2+by^2+bz^2);
Mentre per ottenere la matrice radice quadrata va posto:
ssq:1/sqrt( 2*sqrt(1+bx^2+by^2+bz^2)+2);
Espressione [3]
Formule consigliate !
Usando le funzioni trigonometriche iperboliche...
llz: matrix([ch,
-(bx*sh)/(sqrt(bz^2+by^2+bx^2)*ç),
-(by*sh)/(sqrt(bz^2+by^2+bx^2)*ç),
-(bz*sh)/(sqrt(bz^2+by^2+bx^2)*ç)],
[-(bx*sh*ç)/sqrt(bz^2+by^2+bx^2),
(bx^2*ch+bz^2+by^2)/(bz^2+by^2+bx^2),
(bx*by*ch-bx*by)/(bz^2+by^2+bx^2),
(bx*bz*ch-bx*bz)/(bz^2+by^2+bx^2)],
[-(by*sh*ç)/sqrt(bz^2+by^2+bx^2),
(bx*by*ch-bx*by)/(bz^2+by^2+bx^2),
(by^2*ch+bz^2+bx^2)/(bz^2+by^2+bx^2),
(by*bz*ch-by*bz)/(bz^2+by^2+bx^2)],
[-(bz*sh*ç)/sqrt(bz^2+by^2+bx^2),
(bx*bz*ch-bx*bz)/(bz^2+by^2+bx^2),
(by*bz*ch-by*bz)/(bz^2+by^2+bx^2),
(bz^2*ch+by^2+bx^2)/(bz^2+by^2+bx^2)]);
lz: ev(llz,ch=cosh(4*w),sh=sinh(4*w));
u: [cosh(4*w),
(bx*sinh(4*w)*ç)/sqrt(bz^2+by^2+bx^2),
(by*sinh(4*w)*ç)/sqrt(bz^2+by^2+bx^2),
(bz*sinh(4*w)*ç)/sqrt(bz^2+by^2+bx^2)]
Si verifica la corretta definizione del vettore
u con questa espressione:
transpose(trigsimp(lz.u))[1];
che dà come risultato [1, 0, 0, 0].
Ora mostro come ho programmato in Maximese le
formule della trasformata solo con numeri razionali...
/* [wxMaxima batch file version 1] [ DO NOT EDIT BY HAND! ]*/
/* [ Created with wxMaxima version 13.04.2 ] */
/* [wxMaxima: comment start ]
Uno studio per la Befana 2015...
[wxMaxima: comment end ] */
/* [wxMaxima: title start ]
Lorentz in modo semplicissimo
[wxMaxima: title end ] */
/* [wxMaxima: section start ]
Prima variante:
[wxMaxima: section end ] */
/* [wxMaxima: comment start ]
Questa funzione crea la matrice di Lorentz facendo pero' uso
della funzione sqrt(...) quindi con un piccolo rischio
di complicazioni numeriche ossia che Maxima si incasini e non
riesca a semplificare le espressioni.
---
Questa funzione ha bisogno di due dati:
1) Il vettore che specifica la direzione della trasformazione
ossia un vettore di 4 elementi di cui almeno uno dei primi
tre elementi non deve essere nullo e l'ultimo, che controlla
la formula globale, DEVE ESSERE OBBLIGATORIAMENTE POSITIVO,
MAI NULLO.
2) La velocita' della luce ossia un numero positivo e mai nullo.
---
Questa funzione produce tre risultati ossia :
1) La trasformazione di Lorentz.
2) Il quadrivettore che viene "fermato" dalla trasformazione
di Lorentz ossia la trasformazione di Lorentz moltiplicata
per questo vettore da' un vettore con le componenti spaziali
tutte nulle.
3) Il tensore metrico covariante che si usa e che dipende
da quale e' considerata la velocita' della luce nel vuoto.
---
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
lsemplice(br,lux):=block([bd,bx,by,bz,cm,sh,lz,uu,gm],
bd:sqrt(br[1]*br[1]+br[2]*br[2]+br[3]*br[3]),
bx:br[1]/bd,
by:br[2]/bd,
bz:br[3]/bd,
cm:(br[4]+1/br[4])/2-1,
sh:(br[4]-1/br[4])/2,
lz:matrix([1+cm,-sh*bx/lux,-sh*by/lux,-sh*bz/lux],
[-lux*sh*bx,1+cm*bx*bx,cm*bx*by,cm*bx*bz],
[-lux*sh*by,cm*bx*by,1+cm*by*by,cm*by*bz],
[-lux*sh*bz,cm*bx*bz,cm*by*bz,1+cm*bz*bz]),
uu:[1+cm,lux*sh*bx,lux*sh*by,lux*sh*bz],
gm:matrix([lux*lux,0,0,0],
[0,-1,0,0],[0,0,-1,0],[0,0,0,-1]),
return ([lz,uu,gm]))$
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
Verifico che la funzione data funzioni bene scegliendo
bene i dati in modo da non ottenere radici quadrate.
Quindi Maxima non deve fare praticamente nessuna fatica
a semplificare i risultati...
Definisco tre vettori il cui significato sara' spiegato poi...
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
cluce:7;
besea:[3/13,4/13,12/13,9];
beseaq:[3/13,4/13,12/13,81];
beseasq:[3/13,4/13,12/13,3];
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
Ecco il calcolo applicato al primo vettore....
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
lzz:lsemplice(besea,cluce);
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
Verifico che la trasformazione di Lorentz, applicata al
quadrivettore calcolato, lo fermi veramente ed inoltre la
trasformazione di Lorentz, applicata al tensore metrico
covariante, non lo modifica ossia lo lascia immutato...
---
Attenzione. Se la velocita' della luce non vale 1,
la matrice della trasformazione di Lorentz NON E' SIMMETRICA
per cui va usata anche la sua trasposta ottenuta con
la transpose(...) di Maxima.
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
lzz[2].lzz[3].lzz[2];
print("Dovrebbe essere FERMO ",
"ossia zero tutte le sue componenti spaziali")$
unuovo:lzz[1].lzz[2];
print("La sua norma deve essere invariata")$
unuovo.lzz[3].unuovo;
print("Come e' il tensore metrico all'inizio")$
lzz[3];
print("Dopo la trasformazione il tens.metrico",
" deve essere identico")$
transpose(lzz[1]).lzz[3].lzz[1];
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
Qui mostro come fare il quadrato della trasformazione di
Lorentz ossia cosa viene, applicata due volte di seguito...
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
lzzq:lsemplice(beseaq,cluce);
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
Dimostro che effettivamente lzzq[1] e' il quadrato di lzz[1].
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
lzzq[1]-lzz[1].lzz[1];
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
Dimostro come si fa la radice quadrata della matrice che rappresenta
la trasformazione di Lorentz ossia lzzsq[1] moltiplicata per
se stessa deve dare lzz[1]...
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
lzzsq:lsemplice(beseasq,cluce);
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
Dimostro che realmente lzzsq[1] e' la radice quadrata di lzz[1]...
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
lzz[1]-lzzsq[1].lzzsq[1];
/* [wxMaxima: input end ] */
/* [wxMaxima: section start ]
Seconda variante: W la razionalita' !!!
[wxMaxima: section end ] */
/* [wxMaxima: comment start ]
Questa funzione e' simile a quella precedente ma ha il GRANDE
PREGIO DI NON FARE USO DELLA sqrt(...).
Per evitare problemi impedisco di usare come primo
argomento il valore zero che darebbe divisione per zero
e dunque dati infiniti ossia errore di calcolo....
Il secondo ed il terzo argomento possono essere dati qualsiasi
ed il quarto e' la velocita' della luce nel vuoto che deve
ovviamente non essere mai uno zero..
Se si assegna zero viene usato il valore 1.
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
lrazionale(rd,f,h,xlux):=block([r,lux,bx,by,bz,cm,sh,
lz,uu,gm],
if rd=0 then r:1 else r:rd,
if xlux=0 then lux:1 else lux:abs(xlux),
bx:2*h*(1-f*f)/((1+f*f)*(1+h*h)),
by:4*h*f/((1+f*f)*(1+h*h)),
bz:(1-h*h)/(1+h*h),
cm:(r+1/r)/2-1,
sh:(r-1/r)/2,
lz:matrix([1+cm,-sh*bx/lux,-sh*by/lux,-sh*bz/lux],
[-lux*sh*bx,1+cm*bx*bx,cm*bx*by,cm*bx*bz],
[-lux*sh*by,cm*bx*by,1+cm*by*by,cm*by*bz],
[-lux*sh*bz,cm*bx*bz,cm*by*bz,1+cm*bz*bz]),
uu:[1+cm,lux*sh*bx,lux*sh*by,lux*sh*bz],
gm:matrix([lux*lux,0,0,0],
[0,-1,0,0],[0,0,-1,0],[0,0,0,-1]),
return ([lz,uu,gm]))$
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
Ecco l'applicazione della funzione che produce sempre numeri razionali
se gli argomenti di ingresso sono anche loro razionali...
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
lrr:lrazionale(1+random(7)/11,random(19)/17,random(23)/19,cluce);
lrr[2].lrr[3].lrr[2];
urnuovo:lrr[1].lrr[2];
urnuovo.lrr[3].urnuovo;
print("Come e' il tensore metrico all'inizio")$
lrr[3];
print("Dopo la trasformazione ",
" il tens.metrico deve essere identico")$
transpose(lrr[1]).lrr[3].lrr[1];
/* [wxMaxima: input end ] */
/* [wxMaxima: input start ] */
lrra:lrazionale(25,4,7,cluce);
lrraq:lrazionale(25*25,4,7,cluce);
lrrasq:lrazionale(5,4,7,cluce);
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
Bene se ottengo solo zeri...
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
lrra[1].lrra[1]-lrraq[1];
lrrasq[1].lrrasq[1]-lrra[1];
/* [wxMaxima: input end ] */
/* [wxMaxima: section start ]
Conclusione
[wxMaxima: section end ] */
/* [wxMaxima: comment start ]
Le due funzioni qui definite e sperimentate chiariscono
la struttura della trasformazione di Lorentz e, la seconda,
a mio parere, e' utilissima per lavorare solo con numeri razionali
e quindi operando con la massima precisione possibile
su qualsiasi calcolatore.
[wxMaxima: comment end ] */
/* [wxMaxima: comment start ]
Le formule qui applicate sembrano banali, data la
loro semplicita' ma... a me sembra che siano
raramente usate in letteratura e nell'insegnamento...
[wxMaxima: comment end ] */
/* Maxima can't load/batch files which end with a comment! */
"Created with wxMaxima"$