Advertisement
apexsquirt

[PHP-CLI] Riemann zeta function in ℂ (approximately)

Dec 4th, 2018
249
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 1.88 KB | None | 0 0
  1. <?php
  2. function cm($x,$y) {
  3.     return [$x[0]*$y[0]-$x[1]*$y[1],$x[0]*$y[1]+$x[1]*$y[0]];
  4. }
  5. function inv($z) {
  6.     return [$z[0]/(($z[0]**2)+($z[1]**2)),-$z[1]/(($z[0]**2)+($z[1]**2))];
  7. }
  8. function zetaOriginal($z = [1/2,14.1347251417]) {
  9.     $re = 0; $im = 0;
  10.     for ($i = 1; $i <= 100; $i++) {
  11.         $re -= cos(pi()*$i)/($i**$z[0])*cos($z[1]*log($i));
  12.         $im += cos(pi()*$i)/($i**$z[0])*sin($z[1]*log($i));
  13.     }
  14.     return cm(inv([1-((2**(1-$z[0]))*cos($z[1]*log(2))),(2**(1-$z[0]))*sin($z[1]*log(2))]),[$re,$im]);
  15. }
  16. function gamma($z) {
  17.     $prod = cm(inv($z),[exp(-0.577215664901532866060651209*$z[0])*cos($z[1]),exp(-0.577*$z[0])*sin($z[1])]);
  18.     for ($i = 1; $i <= abs($z[1])*10+1000; $i++) {
  19.         $prod = cm($prod,[exp($z[0]/$i)*cos($z[1]),exp($z[0]/$i)*sin($z[1])]);
  20.         $prod = cm($prod,inv([1+$z[0]/$i,$z[1]/$i]));
  21.     }
  22.     return $prod;
  23. }
  24. function oneminus($z) {
  25.     return [1-$z[0],-$z[1]];
  26. }
  27. function zeta($z = [1/2,14.1347251417]) {
  28.     if ($z[0] >= 1/2) {
  29.         return zetaOriginal($z);
  30.     } else {
  31.         return cm(
  32.             cm (
  33.                 cm(
  34.                     [2**$z[0]*cos($z[1]*log(2)),2**$z[0]*sin($z[1]*log(2))],
  35.                     [pi()**($z[0]-1)*cos($z[1]*log(pi())),pi()**($z[0]-1)*sin($z[1]*log(pi()))]
  36.                 ),
  37.                 cm (
  38.                     [sin(pi()*$z[0]/2)*cosh(pi()*$z[1]/2), cos(pi()*$z[0]/2)*sinh(pi()*$z[1]/2)],
  39.                     gamma([1-$z[0],-$z[1]])
  40.                 )
  41.             ),
  42.             zetaOriginal([1-$z[0],-$z[1]])
  43.         );
  44.     }
  45. }
  46. function value($z) {
  47.     return sqrt($z[0]**2 + $z[1]**2);
  48. }
  49. //plot:
  50. /*$delta = 0.1;
  51. $str = "<body bgcolor='black'>\n";
  52. for ($i = -4; $i <= 5; $i += $delta) {
  53.     for ($j = -25; $j <= 25; $j += 1/2) {
  54.         $val = 1/(1+value(zeta([$i,$j])));
  55.         $val255 = 255*$val;
  56.         $str .= "<div val='".(-log($val))."' s='$i' t='$j' style='position: absolute; font-size: 25px; left: ".($i*20+20*5)."px; top: ".($j*4+4*25-10)."px; color: rgba($val255,$val255,$val255,$val)'>.</div>\n";
  57.     }
  58. }
  59. file_put_contents("plot.html",$str);
  60. print "Done !";
  61. echo `pause>nul`;*/
  62. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement