E-school  di  Arrigo Amadori

Calcolo numerico


Dinamica su una superficie

Per maggiori informazioni :

        http://www.arrigoamadori.com/lezioni/Miscellanea/1/DinamicaSuperficie.htm .

Le equazioni differenziali del secondo ordine vengono approssimate come in eqdiff2ord .  

 
 equazione parametrica della superficie :

 x = x(u, v) = ( es. sfera )
 y = y(u, v) =  
 z = z(u, v) =  
 

 componenti cartesiane della forza fratto la massa :


 Fx = Fx(u, v, U, V) = ( Attenzione !!! )
 Fy = Fy(u, v
, U, V) = ( U = du/dt ) 
 Fz = Fz(u, v
, U, V) = ( V = dv/dt )

 parametri iniziali punto materiale :

  posizione : velocità :
  u v U V
 punto materiale :  


 parametri di iterazione :


 dt = (incremento tempo) ni = (numero iterazioni)

 parametri di scala :

 lar = alt = (larghezza ed altezza immagine in pixel)

 xa = 0         xb = (estremi asse x)
 ya = 0         yb = (estremi asse y)
 za = 0         zb = (estremi asse z)

 ua =    ub = (estremi parametro u) du = (incremento parametro u)
 ncoordu = (numero linee coordinate u)

 va =    vb = (estremi parametro v) dv = (incremento parametro v)
 ncoordv = (numero linee coordinate v)

 

Operatori ammessi :

 + somma  sin() seno  asin() arco seno  sinh() seno iperbolico  asinh() inverso del seno iperbolico  pow(base, esponente) potenza
 - sottrazione  cos() coseno  acos() arco coseno  cosh() coseno iperbolico  acosh() inverso del coseno iperbolico  exp() esponenziale
 * moltiplicazione  tan() tangente  atan() arco tangente  tanh() tangente iperbolica  atanh() inverso del coseno iperbolico  log() logaritmo naturale
 / divisione          abs() valore assoluto
 . segno per decimali          sqrt() radice quadrata
           sgn() segno

Sorgenti PHP :


dinamicasusuperficie.php


<html>

<head>
<title>Dinamica su una superficie</title>
</head>

<body>

<script language="php">

error_reporting (E_ALL ^ E_NOTICE);

// parametri in input 
//
// $xuv = funzione parametrica x(u,v)
// $yuv = funzione parametrica y(u,v)
// $zuv = funzione parametrica z(u,v)
// $ro = densità atmosfera
// $fxuv = forza fx(u,v,U,V)
// $fyuv = forza fy(u,v,U,V)
// $fzuv = forza fz(u,v)
// $k1 = coeff. attrito del mezzo (per parte dipendente dalla velocità lineare)
// $k2 = coeff. attrito del mezzo (per parte dipendente dalla velocità al quadrato)
// particella : $u0 = posizione iniziale u $v0 = posizione iniziale v 
// particella : $upunto0 = velocità iniziale u $upunto0 = velocità iniziale v 
// $lar = larghezza immgine in pixel
// $alt = altezza immagine in pixel
// $xb = fine dominio x
// $yb = fine dominio y
// $zb = fine dominio z
// $ua = 1' valore iniziale parametro u
// $ub = 2' valore iniziale parametro u
// $du = incremento parametro u
// $va = 1' valore iniziale parametro v
// $vb = 2' valore iniziale parametro v
// $dv = incremento parametro v
// $ncoordu = numero coordinate u
// $ncoordv = numero coordinate v
// $ni = numero iterazioni
// $dt = incremento tempo

//
// parametri in output
//
// crea l'immagine PNG e ne visualizza il link
//

// inserisce tutti gli include (funzioni esterne)

if (is_integer(strpos($SERVER_SOFTWARE, "Win")))
{
include("..\Routines\derivataParz.php");
include("..\Routines\daPowAVb.php");
include("..\Routines\daVbAPow.php");
include("..\Routines\derivataMonom.php");
include("..\Routines\semplEspr.php");
include("..\Routines\sgn.php");
include("..\Routines\calcTensMetrCovarDiV2.php");
include("..\Routines\calcTensMetrContrDiV2.php");
include("..\Routines\calcSimbChris1DiV2.php");
include("..\Routines\calcSimbChris2DiV2.php");
include("..\Routines\contrFunz.php");
}
else
{
include("../Routines/derivataParz.php");
include("../Routines/daPowAVb.php");
include("../Routines/daVbAPow.php");
include("../Routines/derivataMonom.php");
include("../Routines/semplEspr.php");
include("../Routines/sgn.php");
include("../Routines/calcTensMetrCovarDiV2.php");
include("../Routines/calcTensMetrContrDiV2.php");
include("../Routines/calcSimbChris1DiV2.php");
include("../Routines/calcSimbChris2DiV2.php");
include("../Routines/contrFunz.php");
}

// controlli vari

if ($xuv == "")
{
echo "Attenzione !!! Manca x(u,v) !!!" . "<p>";
return;
}

if ($yuv == "")
{
echo "Attenzione !!! Manca y(u,v) !!!" . "<p>";
return;
}

if ($zuv == "")
{
echo "Attenzione !!! Manca z(u,v) !!!" . "<p>";
return;
}

if ($fxuv == "")
{
echo "Attenzione !!! Manca fx(u,v,U,V) !!!" . "<p>";
return;
}

if ($fyuv == "")
{
echo "Attenzione !!! Manca fy(u,v,U,V) !!!" . "<p>";
return;
}

if ($fzuv == "")
{
echo "Attenzione !!! Manca fz(u,v,U,V) !!!" . "<p>";
return;
}

$xuv = trim($xuv);
$contr = contrFunz($xuv);
if ($contr == "1")
{
echo "Attenzione !!! La funzione x presenta spazi bianchi, impossibile procedere !!!";
return;
}
if ($contr == "2")
{
echo "Attenzione !!! La funzione x presenta il carattere ^, impossibile procedere !!! Usare la funzione pow(... , ...) !!!";
return;
}
$xuvold = $xuv;

$yuv = trim($yuv);
$contr = contrFunz($yuv);
if ($contr == "1")
{
echo "Attenzione !!! La funzione y presenta spazi bianchi, impossibile procedere !!!";
return;
}
if ($contr == "2")
{
echo "Attenzione !!! La funzione y presenta il carattere ^, impossibile procedere !!! Usare la funzione pow(... , ...) !!!";
return;
}
$yuvold = $yuv;

$zuv = trim($zuv);
$contr = contrFunz($zuv);
if ($contr == "1")
{
echo "Attenzione !!! La funzione z presenta spazi bianchi, impossibile procedere !!!";
return;
}
if ($contr == "2")
{
echo "Attenzione !!! La funzione z presenta il carattere ^, impossibile procedere !!! Usare la funzione pow(... , ...) !!!";
return;
}
$zuvold = $zuv;

$fxuv = trim($fxuv);
$contr = contrFunz($fxuv);
if ($contr == "1")
{
echo "Attenzione !!! La funzione fx presenta spazi bianchi, impossibile procedere !!!";
return;
}
if ($contr == "2")
{
echo "Attenzione !!! La funzione fx presenta il carattere ^, impossibile procedere !!! Usare la funzione pow(... , ...) !!!";
return;
}
$fxuvold = $fxuv;

$fyuv = trim($fyuv);
$contr = contrFunz($fyuv);
if ($contr == "1")
{
echo "Attenzione !!! La funzione fy presenta spazi bianchi, impossibile procedere !!!";
return;
}
if ($contr == "2")
{
echo "Attenzione !!! La funzione fy presenta il carattere ^, impossibile procedere !!! Usare la funzione pow(... , ...) !!!";
return;
}
$fyuvold = $fyuv;

$fzuv = trim($fzuv);
$contr = contrFunz($fzuv);
if ($contr == "1")
{
echo "Attenzione !!! La funzione fz presenta spazi bianchi, impossibile procedere !!!";
return;
}
if ($contr == "2")
{
echo "Attenzione !!! La funzione fz presenta il carattere ^, impossibile procedere !!! Usare la funzione pow(... , ...) !!!";
return;
}
$fzuvold = $fzuv;

// parametri di scala 

$xa = 0; // inizio dominio x
$ya = 0; // inizio dominio y
$za = 0; // inizio dominio z

$dx = ($xb - $xa) / ($lar / 2 - 1); // intervallo di scomposizione asse x 
$dy = ($yb - $ya) / ($lar / 2 - 1); // intervallo di scomposizione asse y 
$dz = ($zb - $za) / ($alt / 2 - 1); // intervallo di scomposizione asse z

$alfa = atan($lar / $alt); // angolo fra asse x e parte negativa asse z
$coeff = sqrt($lar*$lar/4+$alt*$alt/4)/$xb; // coefficiente prospettico

$nu = ($ub - $ua) / $du; // numero iterazioni parametro u
$nv = ($vb - $va) / $dv; // numero iterazioni parametro v

// disegno frame con coordinate 

$im = ImageCreate ($lar + 100, $alt + 100); 

$bianco = ImageColorAllocate ($im, 255, 255, 255);
$nero = ImageColorAllocate ($im, 0, 0, 0);
$rosso = ImageColorAllocate ($im, 255, 0, 0);
$verde = ImageColorAllocate ($im, 0, 255, 0);
$blu = ImageColorAllocate ($im, 0, 0, 255);

Imageline ($im, 0, 0, $lar, 0, $bianco);
Imageline ($im, 0, $alt, $lar, $alt, $bianco);
Imageline ($im, 0, 0, 0, $alt, $bianco);
Imageline ($im, $lar, 0, $lar, $alt, $bianco);

Imageline ($im, $lar / 2, 0, $lar / 2, $alt / 2, $nero);
Imageline ($im, $lar / 2, $alt / 2, $lar, $alt / 2, $nero);
Imageline ($im, $lar / 2, $alt / 2, 0, $alt, $nero);

ImageString ($im, 1, $lar / 2, $alt / 2 + 10, $xa, $nero);
ImageString ($im, 1, 0, $alt + 10, $xb . " (x)" , $nero);
ImageString ($im, 1, $lar / 2 + 10, $lar / 2 - 10, $ya, $nero);
ImageString ($im, 1, $lar + 10, $alt / 2 - 10, $yb . " (y)", $nero);
ImageString ($im, 1, $lar / 2 - 10, $lar / 2 - 10, $za, $nero);
ImageString ($im, 1, $lar / 2 - 10, 0, $zb . " (z)", $nero);

// settaggi

$xxuv = $xuv;
$xxuv = str_replace("u", '$u', $xxuv);
$xxuv = str_replace("v", '$v', $xxuv);
$yyuv = $yuv;
$yyuv = str_replace("u", '$u', $yyuv);
$yyuv = str_replace("v", '$v', $yyuv);
$zzuv = $zuv;
$zzuv = str_replace("u", '$u', $zzuv);
$zzuv = str_replace("v", '$v', $zzuv);

$fxxuv = $fxuv;
$fxxuv = str_replace("u", '$u', $fxxuv);
$fxxuv = str_replace("v", '$v', $fxxuv);
$fxxuv = str_replace("U", '$upunto', $fxxuv);
$fxxuv = str_replace("V", '$vpunto', $fxxuv);
$fyyuv = $fyuv;
$fyyuv = str_replace("u", '$u', $fyyuv);
$fyyuv = str_replace("v", '$v', $fyyuv);
$fyyuv = str_replace("U", '$upunto', $fyyuv);
$fyyuv = str_replace("V", '$vpunto', $fyyuv);
$fzzuv = $fzuv;
$fzzuv = str_replace("u", '$u', $fzzuv);
$fzzuv = str_replace("v", '$v', $fzzuv);
$fzzuv = str_replace("U", '$upunto', $fzzuv);
$fzzuv = str_replace("V", '$vpunto', $fzzuv);

// disegna superficie con coord. curvil. u

$nn = $nu/$ncoordu;
for ($i = 1; $i <= $nu; $i = $i + $nn) 
{
for ($j = 1; $j <= $nv; $j++) 
{
$u = $ua + ($i - 1) * $du;
$v = $va + ($j - 1) * $dv;
$x = 0;
eval("\$ff = @($xxuv);");
$x = $ff;
$y = 0;
eval("\$ff = @($yyuv);");
$y = $ff;
$z = 0;
eval("\$ff = @($zzuv);");
$z = $ff;
$xx = 0;
$yy = 0;
$zz = 0;
if ($x >= -$xb and $x <= $xb and $y >= -$yb and $y <= $yb and $z >= -$zb and $z <= $zb)
{
$xx = $x - $xa;
$yy = $lar / 2 + (($y - $ya)) / $dy;
$zz = $alt / 2 - (($z - $za)) / $dz;
$yyy = $yy - $coeff * $xx * sin($alfa);
$zzz = $zz + $coeff * $xx * cos($alfa);
Imageline ($im, $yyy, $zzz, $yyy, $zzz, $nero);
}
}
}

// disegna superficie con coord. curvil. v

$nn = $nv/$ncoordv;
for ($i = 1; $i <= $nu; $i++) 
{
for ($j = 1; $j <= $nv; $j = $j + $nn) 
{
$u = $ua + ($i - 1) * $du;
$v = $va + ($j - 1) * $dv;
$x = 0;
eval("\$ff = @($xxuv);");
$x = $ff;
$y = 0;
eval("\$ff = @($yyuv);");
$y = $ff;
$z = 0;
eval("\$ff = @($zzuv);");
$z = $ff;
$xx = 0;
$yy = 0;
$zz = 0;
if ($x >= -$xb and $x <= $xb and $y >= -$yb and $y <= $yb and $z >= -$zb and $z <= $zb)
{
$xx = $x - $xa;
$yy = $lar / 2 + (($y - $ya)) / $dy;
$zz = $alt / 2 - (($z - $za)) / $dz;
$yyy = $yy - $coeff * $xx * sin($alfa);
$zzz = $zz + $coeff * $xx * cos($alfa);
Imageline ($im, $yyy, $zzz, $yyy, $zzz, $nero);
}
}
}

// disegna sistema (u,v)

$alt1 = 100;
$lar1 = 100;

$xa1 = $ua;
$xb1 = $ub;
$ya1 = $va;
$yb1 = $vb;

$dx1 = ($xb1 - $xa1) / ($lar1 - 1); // intervallo di scomposizione asse u 
$dy1 = ($yb1 - $ya1) / ($alt1 - 1); // intervallo di scomposizione asse v 

Imageline ($im, 0, 0, $lar1, 0, $nero);
Imageline ($im, 0, $alt1, $lar1, $alt1, $nero);
Imageline ($im, 0, 0, 0, $alt1, $nero);
Imageline ($im, $lar1, 0, $lar1, $alt1, $nero);

ImageString ($im, 1, 0, $alt1 + 10, $xa1 . " (u)", $nero);
ImageString ($im, 1, $lar1, $alt1 + 10, $xb1, $nero);
ImageString ($im, 1, $lar1 + 10, $alt1, $ya1 . " (v)", $nero);
ImageString ($im, 1, $lar1 + 10, 0, $yb1, $nero);

if ($xa1 < 0) // disegna asse y se dentro intervallo
{
Imageline ($im, abs($xa1) / $dx1, 0, abs($xa1) / $dx1, $alt1, $nero);
ImageString ($im, 1, abs($xa1) / $dx1, $alt1 + 10, "0", $nero);
}
if ($ya1 < 0) // disegna asse x se dentro intervallo
{
Imageline ($im, 0, $alt1 - abs($ya1) / $dy1, $lar1, $alt1 - abs($ya1) / $dy1, $nero);
ImageString ($im, 1, $lar1 + 10, $alt1 - abs($ya1) / $dy1, "0", $nero);
}

// calcola tensori e simboli

$g = calcTensMetrCovarDiV2($xuv, $yuv, $zuv);
$gg = calcTensMetrContrDiV2($g);
$chris1 = calcSimbChris1DiV2($g);
$chris2 = calcSimbChris2DiV2($g, $gg, $chris1);

For ($i = 1; $i <= 2; $i++)
{
For ($j = 1; $j <= 2; $j++)
{
For ($k = 1; $k <= 2; $k++)
{
$chris[$i][$j][$k] = $chris2[$i][$j][$k];
$chris[$i][$j][$k] = str_replace("u", '$u', $chris[$i][$j][$k]);
$chris[$i][$j][$k] = str_replace("v", '$v', $chris[$i][$j][$k]);

//echo $i . " " . $j . " " . $k . " " . $chris[$i][$j][$k] . "<p>";

}
}
}

// predispone le formule 

$chris111 = $chris[1][1][1];
$chris121 = $chris[1][2][1];
$chris221 = $chris[2][2][1];

$chris112 = $chris[1][1][2];
$chris122 = $chris[1][2][2];
$chris222 = $chris[2][2][2];

$g11 = $g[1][1];
$g11 = str_replace("u", '$u', $g11);
$g11 = str_replace("v", '$v', $g11);

$g12 = $g[1][2];
$g12 = str_replace("u", '$u', $g12);
$g12 = str_replace("v", '$v', $g12);

$g22 = $g[2][2];
$g22 = str_replace("u", '$u', $g22);
$g22 = str_replace("v", '$v', $g22);

$denom = "($g11)*($g22)-($g12)*($g12)";

$xu1 = DerivataParz($xuv,"u");
$xu2 = DerivataParz($yuv,"u");
$xu3 = DerivataParz($zuv,"u");

$xxu1 = $xu1;
$xxu1 = str_replace("u", '$u', $xxu1);
$xxu1 = str_replace("v", '$v', $xxu1);

$xxu2 = $xu2;
$xxu2 = str_replace("u", '$u', $xxu2);
$xxu2 = str_replace("v", '$v', $xxu2);

$xxu3 = $xu3;
$xxu3 = str_replace("u", '$u', $xxu3);
$xxu3 = str_replace("v", '$v', $xxu3);

$xv1 = DerivataParz($xuv,"v");
$xv2 = DerivataParz($yuv,"v");
$xv3 = DerivataParz($zuv,"v");

$xxv1 = $xv1;
$xxv1 = str_replace("u", '$u', $xxv1);
$xxv1 = str_replace("v", '$v', $xxv1);

$xxv2 = $xv2;
$xxv2 = str_replace("u", '$u', $xxv2);
$xxv2 = str_replace("v", '$v', $xxv2);

$xxv3 = $xv3;
$xxv3 = str_replace("u", '$u', $xxv3);
$xxv3 = str_replace("v", '$v', $xxv3);

$fxu = "($fxxuv)*($xxu1)+($fyyuv)*($xxu2)+($fzzuv)*($xxu3)";
$fxv = "($fxxuv)*($xxv1)+($fyyuv)*($xxv2)+($fzzuv)*($xxv3)";

$termforza1 = "(($fxu)*($g22)-($fxv)*($g12))/($denom)";
$termforza2 = "(($fxv)*($g11)-($fxu)*($g12))/($denom)";

$funz1 = "-($chris111)*(\$upunto)*(\$upunto)-2*($chris121)*(\$upunto)*(\$vpunto)-($chris221)*(\$vpunto)*(\$vpunto)+($termforza1)";

$funz2 = "-($chris112)*(\$upunto)*(\$upunto)-2*($chris122)*(\$upunto)*(\$vpunto)-($chris222)*(\$vpunto)*(\$vpunto)+($termforza2)";

//echo $termforza1 . "<p>" . $termforza2 . "<p>";

//echo "----------------------------<p>";

//echo $funz1 . "<p>" . $funz2 . "<p>";

// iterazione

$uu0 = $u0; $vv0 = $v0; // posizioni iniziali

$uupunto0 = $upunto0; $vvpunto0 = $vpunto0; // velocità iniziali

$t = 0;
for ($ii = 1; $ii <= $ni; $ii++) // iterazione
{
$t = $t + $dt; 

// disegna curva nel sistema (u,v)

$u = $uu0; 
$v = $vv0; 

$x = $u;
$y = $v;
$xx = 0;
$yy = 0;
if ($x >= $xa1 and $x <= $xb1 and $y >= $ya1 and $y <= $yb1 )
{
$xx = ($x - $xa1) / $dx1;
$yy = (abs($yb1 - $ya1) - ($y - $ya1)) / $dy1;
Imageline ($im, $xx, $yy, $xx, $yy, $verde);
}

// disegna curva nel sistema (x,y,z)

eval("\$ff = @($xxuv);");
$x = $ff;
eval("\$ff = @($yyuv);");
$y = $ff;
eval("\$ff = @($zzuv);");
$z = $ff;

if ($x >= -$xb and $x <= $xb and $y >= -$yb and $y <= $yb and $z >= -$zb and $z <= $zb)
{
$xx = $x - $xa;
$yy = $lar / 2 + (($y - $ya)) / $dy;
$zz = $alt / 2 - (($z - $za)) / $dz;
//$zz1 = $alt / 2 - ((0 - $za)) / $dz;
$yyy = $yy - $coeff * $xx * sin($alfa);
$zzz = $zz + $coeff * $xx * cos($alfa);
//$zzz1 = $zz1 + $coeff * $xx * cos($alfa);
//Imageline ($im, $yyy, $zzz, $yyy, $zzz1, $rosso);
Imageline ($im, $yyy, $zzz, $yyy, $zzz, $rosso);
}

// calcolo accelerazioni 

$upunto = $uupunto0; 
$vpunto = $vvpunto0; 

eval("\$ff = @($funz1);");
$u2punti0 = $ff;
eval("\$ff = @($funz2);");
$v2punti0 = $ff;

//echo "bbbbb" . " " . $u . " " . $v . " " . $upunto . " " . $vpunto . "<p>";

// calcolo velocità dopo $dt

$uupunto1 = $uupunto0 + $u2punti0 * $dt;
$vvpunto1 = $vvpunto0 + $v2punti0 * $dt;

// calcolo posizioni dopo $dt

$uu1 = $uu0 + $uupunto0 * $dt;
$vv1 = $vv0 + $vvpunto0 * $dt;

// reset

$uu0 = $uu1; $vv0 = $vv1; 
$uupunto0 = $uupunto1; $vvpunto0 = $vvpunto1; 
}

// disegna immagine

$nomefile = $REMOTE_ADDR;
$nomefile = "grafico" .str_replace(".", "-", $nomefile). ".png";

ImagePng ($im, $nomefile); 

echo "&nbsp;<p>";
echo "&nbsp;<p>";
echo "&nbsp;<p>";
echo "&nbsp;<p>";

echo "<a href='$nomefile'>Visualizza il grafico</a>";

</script>

</body>

</html>

</html>


derivataParz.php daPowAVb.php daVbAPow.php derivataMonom.php semplEspr.php vedi :  derprimsimb.htm  


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>


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>


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>