Mimo że cię to początkowo zaskoczy, wszystko działa prawidłowo, tylko ty popełniłeś parę błędów w kodzie. Poniżej kod prawidłowy i wytłumaczenie "czemu nie działa":
function Gst($j) {
$u = $j; // (1)
$idd = 0.3;
$iw= 2.0;
$uw = 4.5;
$ud = 9.0;
$i0 = (1/2)*($iw+$idd);
$u0 = (1/2)*($uw +$ud);
$a = -($iw-$idd)/($uw-$ud);
$b = (4*$a)/(3*pow($ud-$uw, 2)); // (2)
// (3)
echo $u.'
'; echo '1 Gst = ('.$i0.'-'.$a.'*('.$u.'-'.$u0.')+('.$b.'*('.$u.'-'.$u0.')^3))/ '.$u;
echo '
2 Gst = ('.$i0.'-'.$a.'*('.($u-$u0).')+('.$b.'*('.($u-$u0).')^3))/ '.$u;
echo '
3 Gst = ('.$i0.'-'.($a*($u-$u0)).'+'.($b*($u-$u0)*($u-$u0)*($u-$u0)).')/ '.$u;
echo '
4 Gst = ('.($i0-$a*($u-$u0)+$b*($u-$u0)*($u-$u0)*($u-$u0)).')/ '.$u;
echo '
5 Gst = '.(($i0-$a*($u-$u0)+$b*($u-$u0)*($u-$u0)*($u-$u0))/$u).'
';
}
// (4)
for ($i = 2; $i <= 12; $i++)
Gst($i);
// (5)
1. Tutaj to nie występuje, ale jest to rzecz, która może cię zaskoczyć - w PHP od wersji 5 parametry domyślnie przekazywane są przez referencje, a nie przez wartość (czyli nie piszemy już
&$foo, tylko po prostu
$foo) - gdybyś zmodyfikował taką zmienną wewnątrz funkcji, zmiana ta odzwierciedliłaby się także poza jej ciałem.
2. Operacja
^ w PHP to nie potęgowanie
- do tego służy funkcja
pow(podstawa, wykładnik)3. Tu jest twój główny problem - używanie operatorów matematycznych. Spójrz na poniższy przykład:
$foo = 1;
$bar = 2;
echo 'FOO'.$foo-$bar.'BAR';
echo '
';
echo 'FOO'.($foo-$bar).'BAR';
Oczywiście chcemy, aby w rezultacie otrzymać tekst "FOO-1BAR" (1-2 = -1) - otrzymamy to przy drugim "echo", a pierwszy robi rzecz następującą: od stringu "FOO1" odejmij string "2BAR" (kolejność wykonywania operatorów - operator konkatacji (kropka) jest ważniejszy od operatora odejmowania), w rezultacie wartość "FOO1" zostanie obliczona jako 0 i właśnie od zera odejmuje się "2BAR" (wartość 2), w rezultacie otrzymamy "-2BAR" (0-2 = -2) - szalone to ale prawdziwe
. Tak więc używaj jak wykonujesz jakiekolwiek operacje, używaj nawiasów (jak to ktoś kiedyś mądry powiedział, dodatkowa para nawiasów jeszcze nikomu nie zaszkodziła
.
4. Dla lepszej czytelności zawsze lepiej jest zdefiniować funkcję, a dopiero potem ją wywoływać.
5. Jest taka reguła, która mówi, iż jeżeli plik zawiera tylko i wyłącznie kod PHP (np. definicję klasy, lub jak to ma miejsce w twoim przypadku) nie wstawia się wtedy tagu zamykającego ?>
Mam nadzieję iż pomogłem