E-school  di  Arrigo Amadori

Calcolo numerico 


Superficie astratte


 Per superficie astratta si intende una varietà riemanniana bidimensionale con la struttura metrica definita dal tensore metrico    funzione delle coordinate .

tensore metrico :

 g11(u , v) =   g12(u , v) =
 g21(u , v) = g12              g22(u , v) =


 parametri immagine :

 lar = alt = (larghezza ed altezza immagine in pixel)
 ua  = ub  = (estremi asse u)
 va  = vb  = (estremi asse v)


 


 traiettoria :

 Il campo vettoriale è :

          .

 L'equazione della traiettoria è :

        .

parametri :

 a = a(u, v) =
 b = b(u, v) =

 u0 =  (valore iniziale di u)
 v0 =  (valore iniziale di v)
 dt = (incremento parametro t)
 ni = (numero iterazioni)


 curva :

 La curva è definita da :

        .

parametri :

 u = u(t) =  
 v = v(t) =  

 ta =    tb = (estremi parametro t) dt = (incremento parametro t)


trasporto parallelo :

 Il campo vettoriale lungo la curva  è :

        .

 L'equazione del trasporto parallelo è :

        , con  , , ,

parametri :

 per la curva, vedi precedente curva  

 a0 = (valore iniziale di a)

 b0 = (valore iniziale di b)


 geodetica :

 L'equazione della geodetica è :

        , con  , .

parametri :

 u0 =   u'0 = (valore iniziale di u e della sua derivata dispetto a s)
 v0 =   v'0 = (valore iniziale di v e coefficiente derivata dispetto a s)
 ds = (incremento parametro s)
 ni = (numero iterazioni)

 


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 "&nbsp;<p>";
echo "&nbsp;<p>";
echo "&nbsp;<p>";
echo "&nbsp;<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>