E-school di Arrigo
Amadori
Calcolo numerico
Superficie astratte
Regole :
| 1 - le variabili ammesse sono quelle indicate nella varie funzioni |
| 2 - gli operatori aritmetici ammessi sono : +, -, *, / |
| 3 - non devono esistere spazi bianchi all'interno della funzione |
| 4 - usare solo le parentesi tonde |
| 5 - per i numeri decimali oltre lo zero utilizzare il punto (.) |
| 6 - le funzioni permesse sono : sin() cos() tan() atan() sqrt() log() exp() |
| 7 - La funzione potenza è : pow(base, esponente) |
| 8 - non sono ammessi esponenti contenenti le variabili |
Suite di programmi di calcolo numerico : http://lnx.arrigoamadori.com/CalcoloNumerico/calcolonumericolnx.htm
Sorgenti PHP :
superficieastratte.php
<html>
<head>
<title>Superficie astratte</title>
</head>
<body>
<script language="php">
error_reporting (E_ALL ^ E_NOTICE);
//
// disegna vari tipi di curve sul piano (u,v)
//
// inserisce tutti gli include (funzioni esterne)
if (is_integer(strpos($SERVER_SOFTWARE, "Win")))
{
include("..\Routines\sgn.php");
include("..\Routines\contrFunz.php");
include("..\Routines\derivataParz.php");
include("..\Routines\daPowAVb.php");
include("..\Routines\daVbAPow.php");
include("..\Routines\derivataMonom.php");
include("..\Routines\semplEspr.php");
include("..\Routines\calcTensMetrCovarDiV2.php");
include("..\Routines\calcTensMetrContrDiV2.php");
include("..\Routines\calcSimbChris1DiV2.php");
include("..\Routines\calcSimbChris2DiV2.php");
}
else
{
include("../Routines/sgn.php");
include("../Routines/contrFunz.php");
include("../Routines/derivataParz.php");
include("../Routines/daPowAVb.php");
include("../Routines/daVbAPow.php");
include("../Routines/derivataMonom.php");
include("../Routines/semplEspr.php");
include("../Routines/calcTensMetrCovarDiV2.php");
include("../Routines/calcTensMetrContrDiV2.php");
include("../Routines/calcSimbChris1DiV2.php");
include("../Routines/calcSimbChris2DiV2.php");
}
// controlli vari
if ($g11 == "")
{
echo "Attenzione !!! Manca g11 !!!";
return;
}
if ($g12 == "")
{
echo "Attenzione !!! Manca g12 !!!";
return;
}
if ($g22 == "")
{
echo "Attenzione !!! Manca g22 !!!";
return;
}
if ($ut == "")
{
echo "Attenzione !!! Manca u = u(t) !!!";
return;
}
if ($vt == "")
{
echo "Attenzione !!! Manca v = v(t) !!!";
return;
}
if ($auv == "")
{
echo "Attenzione !!! Manca a = a(u, v) !!!";
return;
}
if ($buv == "")
{
echo "Attenzione !!! Manca b = b(u, v) !!!";
return;
}
$g11 = trim($g11);
$contr = contrFunz($g11);
if ($contr == "1")
{
echo "Attenzione !!! La funzione g11 presenta spazi bianchi, impossibile procedere !!!";
return;
}
if ($contr == "2")
{
echo "Attenzione !!! La funzione g11 presenta il carattere ^, impossibile procedere !!! Usare la funzione pow(... , ...) !!!";
return;
}
$g12 = trim($g12);
$contr = contrFunz($g12);
if ($contr == "1")
{
echo "Attenzione !!! La funzione g12 presenta spazi bianchi, impossibile procedere !!!";
return;
}
if ($contr == "2")
{
echo "Attenzione !!! La funzione g12 presenta il carattere ^, impossibile procedere !!! Usare la funzione pow(... , ...) !!!";
return;
}
$g22 = trim($g22);
$contr = contrFunz($g22);
if ($contr == "1")
{
echo "Attenzione !!! La funzione g22 presenta spazi bianchi, impossibile procedere !!!";
return;
}
if ($contr == "2")
{
echo "Attenzione !!! La funzione g22 presenta il carattere ^, impossibile procedere !!! Usare la funzione pow(... , ...) !!!";
return;
}
$ut = trim($ut);
$contr = contrFunz($ut);
if ($contr == "1")
{
echo "Attenzione !!! La funzione u = u(t) presenta spazi bianchi, impossibile procedere !!!";
return;
}
if ($contr == "2")
{
echo "Attenzione !!! La funzione u = u(t) presenta il carattere ^, impossibile procedere !!! Usare la funzione pow(... , ...) !!!";
return;
}
$utold = $ut;
$ut = str_replace("atanh", "aaa", $ut);
$ut = str_replace("atan", "bbb", $ut);
$ut = str_replace("tanh", "ccc", $ut);
$ut = str_replace("tan", "ddd", $ut);
$ut = str_replace("sqrt", "eee", $ut);
$ut = str_replace("t", "z", $ut);
$ut = str_replace("aaa", "atanh", $ut);
$ut = str_replace("bbb", "atan", $ut);
$ut = str_replace("ccc", "tanh", $ut);
$ut = str_replace("ddd", "tan", $ut);
$ut = str_replace("eee", "sqrt", $ut);
$vt = trim($vt);
$contr = contrFunz($vt);
if ($contr == "1")
{
echo "Attenzione !!! La funzione v = v(t) presenta spazi bianchi, impossibile procedere !!!";
return;
}
if ($contr == "2")
{
echo "Attenzione !!! La funzione v = v(t) presenta il carattere ^, impossibile procedere !!! Usare la funzione pow(... , ...) !!!";
return;
}
$vtold = $vt;
$vt = str_replace("atanh", "aaa", $vt);
$vt = str_replace("atan", "bbb", $vt);
$vt = str_replace("tanh", "ccc", $vt);
$vt = str_replace("tan", "ddd", $vt);
$vt = str_replace("sqrt", "eee", $vt);
$vt = str_replace("t", "z", $vt);
$vt = str_replace("aaa", "atanh", $vt);
$vt = str_replace("bbb", "atan", $vt);
$vt = str_replace("ccc", "tanh", $vt);
$vt = str_replace("ddd", "tan", $vt);
$vt = str_replace("eee", "sqrt", $vt);
$auv = trim($auv);
$contr = contrFunz($auv);
if ($contr == "1")
{
echo "Attenzione !!! La funzione a = a(u, v) presenta spazi bianchi, impossibile procedere !!!";
return;
}
if ($contr == "2")
{
echo "Attenzione !!! La funzione a = a(u, v) presenta il carattere ^, impossibile procedere !!! Usare la funzione pow(... , ...) !!!";
return;
}
$buv = trim($buv);
$contr = contrFunz($buv);
if ($contr == "1")
{
echo "Attenzione !!! La funzione b = b(u, v) presenta spazi bianchi, impossibile procedere !!!";
return;
}
if ($contr == "2")
{
echo "Attenzione !!! La funzione b = b(u, v) presenta il carattere ^, impossibile procedere !!! Usare la funzione pow(... , ...) !!!";
return;
}
// programma
$im = ImageCreate ($lar + 100, $alt + 150);
$bianco = ImageColorAllocate ($im, 255, 255, 255);
$nero = ImageColorAllocate ($im, 0, 0, 0);
$rosso = ImageColorAllocate ($im, 255, 180, 180); // sbiadito !!!
$rossorosso = ImageColorAllocate ($im, 255, 0, 0);
$verde = ImageColorAllocate ($im, 0, 255, 0);
$blu = ImageColorAllocate ($im, 180, 180, 255); // sbiadito !!!
$blublu = ImageColorAllocate ($im, 0, 0, 255);
$rosa = ImageColorAllocate ($im, 255, 0, 255);
$rut = str_replace("z", '$t', $ut);
$rvt = str_replace("z", '$t', $vt);
// parametri di scala
$xa = $ua; $xb = $ub;
$ya = $va; $yb = $vb;
$dx = ($xb - $xa) / ($lar - 1); // intervallo di scomposizione asse x
$dy = ($yb - $ya) / ($alt - 1); // intervallo di scomposizione asse y
// disegno frame con coordinate
Imageline ($im, 0, 0, $lar, 0, $nero);
Imageline ($im, 0, $alt, $lar, $alt, $nero);
Imageline ($im, 0, 0, 0, $alt, $nero);
Imageline ($im, $lar, 0, $lar, $alt, $nero);
ImageString ($im, 1, 0, $alt + 10, $xa . " (u)", $nero);
ImageString ($im, 1, $lar, $alt + 10, $xb, $nero);
ImageString ($im, 1, $lar + 10, $alt, $ya . " (v)", $nero);
ImageString ($im, 1, $lar + 10, 0, $yb, $nero);
if ($xa < 0) // disegna asse y se dentro intervallo
{
Imageline ($im, abs($xa) / $dx, 0, abs($xa) / $dx, $alt, $nero);
ImageString ($im, 1, abs($xa) / $dx, $alt + 10, "0", $nero);
}
if ($ya < 0) // disegna asse x se dentro intervallo
{
Imageline ($im, 0, $alt - abs($ya) / $dy, $lar, $alt - abs($ya) / $dy, $nero);
ImageString ($im, 1, $lar + 10, $alt - abs($ya) / $dy, "0", $nero);
}
if ($geodetica == "S" or $trasppar == "S")
{
// calcola tensori e simboli
//$g = calcTensMetrCovarDiV2($xuv, $yuv, $zuv);
$g[1][1] = $g11;
$g[1][2] = $g12;
$g[2][1] = $g12;
$g[2][2] = $g22;
//echo $g[1][1] . "<p>";
//echo $g[1][2] . "<p>";
//echo $g[2][1] . "<p>";
//echo $g[2][2] . "<p>";
$gg = calcTensMetrContrDiV2($g);
$chris1 = calcSimbChris1DiV2($g);
$chris2 = calcSimbChris2DiV2($g, $gg, $chris1);
}
// disegna curva
if ($curva == "S")
{
$ni = ($tb - $ta) / $dt;
for ($i = 1; $i <= $ni; $i++)
{
$t = $ta + ($i - 1) * $dt;
$x = 0;
eval("\$ff = @($rut);");
$x = $ff;
$y = 0;
eval("\$ff = @($rvt);");
$y = $ff;
$xx = 0;
$yy = 0;
if ($x >= $xa and $x <= $xb and $y >= $ya and $y <= $yb )
{
$xx = ($x - $xa) / $dx;
$yy = (abs($yb - $ya) - ($y - $ya)) / $dy;
Imageline ($im, $xx, $yy, $xx, $yy, $verde);
}
}
} // fine curva
// disegna geodetica
if ($geodetica == "S")
{
// disegna geodetica nella spazio (x,y,z)
// redefinizioni funzioni e simboli di C. del 2' tipo
For ($i = 1; $i <= 2; $i++)
{
For ($j = 1; $j <= 2; $j++)
{
For ($k = 1; $k <= 2; $k++)
{
$f[$i][$j][$k] = $chris2[$i][$j][$k];
$f[$i][$j][$k] = str_replace("u", '$x1', $f[$i][$j][$k]);
$f[$i][$j][$k] = str_replace("v", '$x2', $f[$i][$j][$k]);
}
}
}
// calcolo dv0 in quanto sussiste una relazione fondamentale fra du0 e dv0 ed
// il tensore metrico fondamentale
$segno = 1;
if ($segnodv0 != "+")
{
$segno = -1;
}
For ($i = 1; $i <= 2; $i++)
{
For ($j = 1; $j <= 2; $j++)
{
$ff = $g[$i][$j];
$ff = str_replace("u", '$x1', $ff);
$ff = str_replace("v", '$x2', $ff);
$x1 = $u0;
$x2 = $v0;
eval("\$fff = @($ff);");
$valg[$i][$j] = $fff;
}
}
$dv0 = @((-$valg[1][2] * $du0 + $segno * sqrt(pow($valg[1][2], 2) * pow($du0, 2) - $valg[2][2] * ($valg[1][1] * pow($du0, 2) - 1))) / $valg[2][2]);
if (!is_numeric($dv0) or is_integer(strpos($dv0, "IND")) or is_integer(strpos($dv0, "INF")))
{
echo "Attenzione !!! Parametri iniziali della geodetica non congruenti, impossibile procedere !!!" . "<p>";
return;
}
$u0old = $u0;
$v0old = $v0;
$du0old = $du0;
$dv0old = $dv0;
// disegna geodetica approssimando l'equazione della geodetica col metodo delle differenze finite
$rru0 = $u0; $rrdu0 = $du0;
$rrv0 = $v0; $rrdv0 = $dv0;
$x1 = $u0;
$x2 = $v0;
$ddu0 = 0; // derivata seconda di u rispetto as s iniziale
$ff = $f[1][1][1]; eval("\$fff = @($ff);");
$ddu0 = $ddu0 - $fff * $du0 * $du0;
$ff = $f[1][2][1]; eval("\$fff = @($ff);");
$ddu0 = $ddu0 - $fff * $du0 * $dv0;
$ff = $f[2][1][1]; eval("\$fff = @($ff);");
$ddu0 = $ddu0 - $fff * $dv0 * $du0;
$ff = $f[2][2][1]; eval("\$fff = @($ff);");
$ddu0 = $ddu0 - $fff * $dv0 * $dv0;
$ddv0 = 0; // derivata seconda di v rispetto as s iniziale
$ff = $f[1][1][2]; eval("\$fff = @($ff);");
$ddv0 = $ddv0 - $fff * $du0 * $du0;
$ff = $f[1][2][2]; eval("\$fff = @($ff);");
$ddv0 = $ddv0 - $fff * $du0 * $dv0;
$ff = $f[2][1][2]; eval("\$fff = @($ff);");
$ddv0 = $ddv0 - $fff * $dv0 * $du0;
$ff = $f[2][2][2]; eval("\$fff = @($ff);");
$ddv0 = $ddv0 - $fff * $dv0 * $dv0;
For ($i = 1; $i <= $nis; $i++)
{
// approssimazione della geodetica con metodo delle diff. finite
$u1 = $ds * $du0 + $u0;
$du1 = $ds * $ddu0 + $du0;
$v1 = $ds * $dv0 + $v0;
$dv1 = $ds * $ddv0 + $dv0;
$ddu1 = 0;
$x1 = $u1;
$x2 = $v1;
$ff = $f[1][1][1]; eval("\$fff = @($ff);");
$ddu1 = $ddu1 - $fff * $du1 * $du1;
$ff = $f[1][2][1]; eval("\$fff = @($ff);");
$ddu1 = $ddu1 - $fff * $du1 * $dv1;
$ff = $f[2][1][1]; eval("\$fff = @($ff);");
$ddu1 = $ddu1 - $fff * $dv1 * $du1;
$ff = $f[2][2][1]; eval("\$fff = @($ff);");
$ddu1 = $ddu1 - $fff * $dv1 * $dv1;
$ddv1 = 0;
$ff = $f[1][1][2]; eval("\$fff = @($ff);");
$ddv1 = $ddv1 - $fff * $du1 * $du1;
$ff = $f[1][2][2]; eval("\$fff = @($ff);");
$ddv1 = $ddv1 - $fff * $du1 * $dv1;
$ff = $f[2][1][2]; eval("\$fff = @($ff);");
$ddv1 = $ddv1 - $fff * $dv1 * $du1;
$ff = $f[2][2][2]; eval("\$fff = @($ff);");
$ddv1 = $ddv1 - $fff * $dv1 * $dv1;
$x = $u1;
$y = $v1;
if ($x >= $xa and $x <= $xb and $y >= $ya and $y <= $yb )
{
$xx = ($x - $xa) / $dx;
$yy = (abs($yb - $ya) - ($y - $ya)) / $dy;
Imageline ($im, $xx, $yy, $xx, $yy, $rosa);
}
// reiterazione
$u0 = $u1;
$du0 = $du1;
$ddu0 = $ddu1;
$v0 = $v1;
$dv0 = $dv1;
$ddv0 = $ddv1;
}
} // fine geodetica
// disegna traiettoria
if ($traiettoria == "S")
{
// redefinizioni funzioni
$rauv = str_replace("u", '$x1', $auv);
$rauv = str_replace("v", '$x2', $rauv);
$rbuv = str_replace("u", '$x1', $buv);
$rbuv = str_replace("v", '$x2', $rbuv);
// disegna traiettoria approssimando l'equazione della traiettoria col metodo delle differenze finite
$ru0 = $u0_1;
$rv0 = $v0_1;
$x1 = $u0_1;
$x2 = $v0_1;
For ($i = 1; $i <= $ni_1; $i++)
{
// approssimazione della traiettoria con metodo delle diff. finite
$ff = $rauv; eval("\$fff = @($ff);");
$u1 = $dt_1 * $fff + $ru0;
$ff = $rbuv; eval("\$fff = @($ff);");
$v1 = $dt_1 * $fff + $rv0;
$x = $u1;
$y = $v1;
if ($x >= $xa and $x <= $xb and $y >= $ya and $y <= $yb )
{
$xx = ($x - $xa) / $dx;
$yy = (abs($yb - $ya) - ($y - $ya)) / $dy;
Imageline ($im, $xx, $yy, $xx, $yy, $nero);
}
// reiterazione
$ru0 = $u1;
$rv0 = $v1;
$x1 = $u1;
$x2 = $v1;
}
} // fine traiettoria
// disegna trasporto parallelo su superfcie
if ($trasppar == "S")
{
if ($curva != "S")
{
echo "Attenzione !!! Opzione curva non selezionata, impossibile procedere !!!<p>";
return;
}
$a0old = $a0;
$b0old = $b0;
// ridefinizioni funzioni e simboli di C. del 2' tipo
For ($i = 1; $i <= 2; $i++)
{
For ($j = 1; $j <= 2; $j++)
{
For ($k = 1; $k <= 2; $k++)
{
$f[$i][$j][$k] = $chris2[$i][$j][$k];
$f[$i][$j][$k] = str_replace("u", '$u', $f[$i][$j][$k]);
$f[$i][$j][$k] = str_replace("v", '$v', $f[$i][$j][$k]);
//echo $f[$i][$j][$k] . "<b>";
}
}
}
$f111 = $f[1][1][1];
$f112 = $f[1][1][2];
$f121 = $f[1][2][1];
$f122 = $f[1][2][2];
$f211 = $f[2][1][1];
$f212 = $f[2][1][2];
$f221 = $f[2][2][1];
$f222 = $f[2][2][2];
// calcola trasporto parallelo col metodo delle differenze finite
$ra0 = $a0;
$rb0 = $b0;
$nt = ($tb - $ta) / $dt; // numero iterazioni parametro t
$da = '-((' . $f111 . ')*($du)*($ra0) + (' . $f121 . ')*($du)*($rb0) + (' . $f211 . ')*($dv)*($ra0) + (' . $f221 . ')*($dv)*($rb0))';
$db = '-((' . $f112 . ')*($du)*($ra0) + (' . $f122 . ')*($du)*($rb0) + (' . $f212 . ')*($dv)*($ra0) + (' . $f222 . ')*($dv)*($rb0))';
//echo $da . " " . $db . "<p>";
$t = $ta;
for ($i = 1; $i <= $nt; $i++)
{
eval("\$u1 = @($rut);");
eval("\$v1 = @($rvt);");
$u = $u1;
$v = $v1;
if ($i == 1 or $i == $nt)
{
//echo $t . " " . $u . " " . $v . " " . $ra0 . " " . $rb0 . "<p>";
if ($i == 1)
{
$traspini1 = $t;
$traspini2 = $u;
$traspini3 = $v;
$traspini4 = $ra0;
$traspini5 = $rb0;
}
if ($i == $nt)
{
$traspfin1 = $t;
$traspfin2 = $u;
$traspfin3 = $v;
$traspfin4 = $ra0;
$traspfin5 = $rb0;
}
}
$tt = $t;
$t = $t + $dt;
eval("\$u2 = @($rut);");
eval("\$v2 = @($rvt);");
$t = $tt;
$du = $u2 - $u1;
$dv = $v2 - $v1;
eval("\$rda = @($da);");
eval("\$rdb = @($db);");
//echo $ra0 . " " . $rb0 . "<p>";
$ra0 = $ra0 + $rda;
$rb0 = $rb0 + $rdb;
$t = $t + $dt;
}
$u1 = $traspini2;
$v1 = $traspini3;
$u2 = $traspini2 + $traspini4;
$v2 = $traspini3 + $traspini5;
$xx1 = ($u1 - $xa) / $dx;
$yy1 = (abs($yb - $ya) - ($v1 - $ya)) / $dy;
$xx2 = ($u2 - $xa) / $dx;
$yy2 = (abs($yb - $ya) - ($v2 - $ya)) / $dy;
Imageline ($im, $xx1, $yy1, $xx2, $yy2, $blublu);
$u1 = $traspfin2;
$v1 = $traspfin3;
$u2 = $traspfin2 + $traspfin4;
$v2 = $traspfin3 + $traspfin5;
$xx1 = ($u1 - $xa) / $dx;
$yy1 = (abs($yb - $ya) - ($v1 - $ya)) / $dy;
$xx2 = ($u2 - $xa) / $dx;
$yy2 = (abs($yb - $ya) - ($v2 - $ya)) / $dy;
Imageline ($im, $xx1, $yy1, $xx2, $yy2, $rossorosso);
} // fine trasporto parallelo
// riporta dati iniziali
ImageString ($im, 2, 0, $alt + 30, "g11 = " . $g11 . " ; g12 = " . $g12, $nero);
ImageString ($im, 2, 0, $alt + 40, "g21 = " . $g12 . " ; g22 = " . $g22, $nero);
ImageString ($im, 2, 0, $alt + 60, "curva : ( u(t) , v(t) ) = ( " . $utold . " , " . $vtold . " ) ; " . $ta . " < t < " . $tb, $verde);
ImageString ($im, 2, 0, $alt + 80, "traiettoria campo : ( a(u,v) , b(u,v) ) = ( " . $auv . " , " . $buv . " ) ; u0 = " . $u0_1 . " ; v0 = " . $v0_1, $nero);
ImageString ($im, 2, 0, $alt + 100, "geodetica : u0 = " . $u0old . " ; v0 = " . $v0old . " ; u'0 = " . $du0old . " ; v'0 = " . $dv0old, $rosa);
ImageString ($im, 2, 0, $alt + 120, "trasporto parallelo : a0 = " . $a0old . " ; b0 = " . $b0old, $rossorosso);
// disegna immagine
$nomefile = $REMOTE_ADDR;
$nomefile = "grafico" .str_replace(".", "-", $nomefile). ".png";
ImagePng ($im, $nomefile);
echo " <p>";
echo " <p>";
echo " <p>";
echo " <p>";
echo "<a href='$nomefile'>Visualizza il grafico</a>";
</script>
</body>
</html>
</html>
sgn.php
<script language="php">
error_reporting (E_ALL ^ E_NOTICE);
function sgn($x)
{
// funzione sgn
// x = variabile indipendente
if ($x > 0)
{
return +1;
}
if ($x == 0)
{
return 0;
}
if ($x < 0)
{
return -1;
}
} // fine sgn()
</script>
contrFunz.php
<script language="php">
error_reporting (E_ALL ^ E_NOTICE);
function contrFunz($funz)
{
// controllo formale digitazione funzione
// viene controllata l'esistenza dei seguenti caratteri : blank, ^
// se tali caratteri vengono trovati, vine settata la variabile d'uscita
// $funz = funzione da controllare
$errore = "";
if (is_numeric(strpos($funz, ' ')))
{
$errore = "1";
}
if (is_numeric(strpos($funz, '^')))
{
$errore = "2";
}
return $errore;
} // fine contrFunz
</script>
derivataParz.php daPowAVb.php daVbAPow.php derivataMonom.php semplEspr.php vedi : derprimsimb.htm
calcTensMetrCovarDiV2.php
<script language="php">
error_reporting (E_ALL ^ E_NOTICE);
function calcTensMetrCovarDiV2($x, $y, $z)
{
// calcolo del tensore metrico covariante di V2
// parametri in input :
// x = funzione di u e v
// y = funzione di u e v
// z = funzione di u e v
// parametri in output :
// g(i,k) = tensore metrico covariante di V2 (variabile global)
$g[1][1] = "pow(" . derivataParz($x, "u") . ",
2)";
$g[1][1] = $g[1][1] . "+pow(" . derivataParz($y, "u") .
", 2)";
$g[1][1] = $g[1][1] . "+pow(" . derivataParz($z, "u") .
", 2)";
$g[1][2] = "(" . derivataParz($x, "u") . ")*(" .
derivataParz($x, "v") . ")";
$g[1][2] = $g[1][2] . "+(" . derivataParz($y, "u") .
")*(" . derivataParz($y, "v") . ")";
$g[1][2] = $g[1][2] . "+(" . derivataParz($z, "u") .
")*(" . derivataParz($z, "v") . ")";
$g[2][1] = $g[1][2];
$g[2][2] = "pow(" . derivataParz($x, "v") . ",
2)";
$g[2][2] = $g[2][2] . "+pow(" . derivataParz($y, "v") .
", 2)";
$g[2][2] = $g[2][2] . "+pow(" . derivataParz($z, "v") .
", 2)";
return $g;
} // fine calcTensMetrCovarDiV2()
</script>
calcTensMetrContrDiV2.php
<script language="php">
error_reporting (E_ALL ^ E_NOTICE);
function calcTensMetrContrDiV2($g)
{
// calcolo del tensore metrico controvariante di V2
// parametri in input :
// g(i,k) = tensore metrico controvariante di V2
// parametri in output :
// gcontr(i,k) = tensore metrico controvariante di V2
$denom = "((" . $g[1][1] . ")*(" . $g[2][2] .
")-(" . $g[1][2] . ")*(" . $g[2][1] . "))";
$gcontr[1][1] = "(" . $g[2][2] . ")/" . $denom;
$gcontr[1][2] = "(-(" . $g[1][2] . ")/" . $denom .
")";
$gcontr[2][1] = "(-(" . $g[2][1] . ")/" . $denom .
")";
$gcontr[2][2] = "(" . $g[1][1] . ")/" . $denom;
return $gcontr;
} // fine calcTensMetrContrDiV2()
</script>
calcSimbChris1DiV2.php
<script language="php">
error_reporting (E_ALL ^ E_NOTICE);
function calcSimbChris1DiV2($g)
{
// calcolo dei simboli di Christoffel del 1' tipo di V2
// parametri in input :
// g(i,k) = tensore metrico covariante di V2
// parametri in output :
// chris1(j,l,k) = tensore metrico covariante di V2
For ($j = 1; $j <= 2; $j++)
{
For ($l = 1; $l <= 2; $l++)
{
For ($k = 1; $k <= 2; $k++)
{
If ($l == 1) {$varl = "u";}
If ($l == 2) {$varl = "v";}
If ($j == 1) {$varj = "u";}
If ($j == 2) {$varj = "v";}
If ($k == 1) {$vark = "u";}
If ($k == 2) {$vark = "v";}
$chris1[$j][$l][$k] = "(1/2)*(" . derivataParz($g[$j][$k], $varl);
$chris1[$j][$l][$k] = $chris1[$j][$l][$k] . "+(" . derivataParz($g[$k][$l],
$varj) . ")";
$chris1[$j][$l][$k] = $chris1[$j][$l][$k] . "-(" . derivataParz($g[$j][$l],
$vark) . "))";
}
}
}
return $chris1;
} // fine calcSimbChris1DiV2()
</script>
calcSimbChris2DiV2.php
<script language="php">
error_reporting (E_ALL ^ E_NOTICE);
function calcSimbChris2DiV2($g, $gcontr, $chris1)
{
// calcolo dei simboli di Christoffel del 2' tipo di V2
// parametri in input :
// g(i,k) = tensore metrico covariante di V2
// gcontr(i,k) = tensore metrico controvariante di V2
// chris1(j,l,k) = simboli di Chistoffel del 1' tipo
// parametri in output :
// chris2(j,l,k) = simboli di Christoffel del 2' tipo di V2
For ($j = 1; $j <= 2; $j++)
{
For ($l = 1; $l <= 2; $l++)
{
For ($i = 1; $i <= 2; $i++)
{
$chris2[$j][$l][$i] = "(";
For ($k = 1; $k <= 2; $k++)
{
$chris2[$j][$l][$i] = $chris2[$j][$l][$i] . "(" .
$gcontr[$i][$k] . ")*(" . $chris1[$j][$l][$k] . ")+";
}
$chris2[$j][$l][$i] = substr($chris2[$j][$l][$i], 0, strlen($chris2[j][$l][$i])
- 1) . ")";
}
}
}
return $chris2;
} // fine calcSimbChris2DiV2()
</script>