<div dir="ltr">Finally got to the end of the problem and replicated the plot of the Riemann Zeta function on the critical line (s=0.5 + %i*t)<div>Looks pretty close to that shown on the Wikipedia page for the Riemann Zeta Function!<br><div><span style="font-family:Arial;color:rgb(176,24,19)"><br></span></div><div><span style="font-family:Arial;color:rgb(176,24,19)">function</span><span style="font-family:Arial"> </span><span style="font-family:Arial;color:rgb(131,67,16)">zs1</span><span style="font-family:Arial;color:rgb(92,92,92)">=</span><span style="font-family:Arial;color:rgb(0,0,0);text-decoration-line:underline">zeta_0_1</span><span style="font-family:Arial;color:rgb(74,85,219)">(</span><span style="font-family:Arial;color:rgb(131,67,16)">s</span><span style="font-family:Arial;color:rgb(0,0,0)">, </span><span style="font-family:Arial;color:rgb(131,67,16)">n</span><span style="font-family:Arial;color:rgb(74,85,219)">)</span><br></div><div><div><pre style="font-family:Arial"><span style="color:rgb(100,174,100)">// Vectorised version </span>
<span style="color:rgb(131,67,16)">zs1</span><span style="color:rgb(92,92,92)">=</span><span style="color:rgb(188,143,143)">0</span>
<span style="color:rgb(0,0,0)">k</span><span style="color:rgb(92,92,92)">=</span><span style="color:rgb(50,185,185)">linspace</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(188,143,143)">1</span><span style="color:rgb(0,0,0)">,</span><span style="color:rgb(131,67,16)">n</span><span style="color:rgb(0,0,0)">,</span><span style="color:rgb(131,67,16)">n</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(0,0,0)">;</span>
<span style="color:rgb(131,67,16)">zs1</span> <span style="color:rgb(92,92,92)">=</span> <span style="color:rgb(50,185,185)">sum</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(92,92,92)">-</span><span style="color:rgb(188,143,143)">1</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(92,92,92)">.^</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(0,0,0)">k</span><span style="color:rgb(92,92,92)">+</span> <span style="color:rgb(188,143,143)">1</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(92,92,92)">./</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(0,0,0)">k</span><span style="color:rgb(92,92,92)">.^</span><span style="color:rgb(131,67,16)">s</span> <span style="color:rgb(74,85,219)">)</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(0,0,0)">;</span>
<span style="color:rgb(131,67,16)">zs1</span> <span style="color:rgb(92,92,92)">=</span> <span style="color:rgb(188,143,143)">1.</span><span style="color:rgb(92,92,92)">/</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(188,143,143)">1</span> <span style="color:rgb(92,92,92)">-</span> <span style="color:rgb(188,143,143)">2.</span><span style="color:rgb(92,92,92)">^</span><span style="color:rgb(74,85,219)">(</span> <span style="color:rgb(188,143,143)">1</span><span style="color:rgb(92,92,92)">-</span><span style="color:rgb(131,67,16)">s</span> <span style="color:rgb(74,85,219)">)</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(92,92,92)">.*</span><span style="color:rgb(131,67,16)">zs1</span><span style="color:rgb(0,0,0)">;</span>
<span style="color:rgb(176,24,19)">endfunction</span>
<span style="color:rgb(0,0,0)">k</span><span style="color:rgb(92,92,92)">=</span><span style="color:rgb(50,185,185)">linspace</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(188,143,143)">1</span><span style="color:rgb(0,0,0)">,</span><span style="color:rgb(188,143,143)">50</span><span style="color:rgb(0,0,0)">,</span><span style="color:rgb(188,143,143)">1000</span><span style="color:rgb(74,85,219)">)</span>
<span style="color:rgb(0,0,0)">s_list</span><span style="color:rgb(92,92,92)">=</span><span style="color:rgb(188,143,143)">0.5</span><span style="color:rgb(92,92,92)">+</span><span style="color:rgb(218,112,214)">%i</span><span style="color:rgb(92,92,92)">*</span><span style="color:rgb(0,0,0)">k</span><span style="color:rgb(0,0,0)">;</span>
<span style="color:rgb(160,32,240)">for</span> <span style="color:rgb(0,0,0)">i</span> <span style="color:rgb(92,92,92)">=</span> <span style="color:rgb(188,143,143)">1</span><span style="color:rgb(255,170,0)">:</span><span style="color:rgb(50,185,185)">length</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(0,0,0)">k</span><span style="color:rgb(74,85,219)">)</span>
<span style="color:rgb(0,0,0)">s2</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(0,0,0)">i</span><span style="color:rgb(74,85,219)">)</span> <span style="color:rgb(92,92,92)">=</span> <span style="color:rgb(0,0,0);text-decoration-line:underline">zeta_0_1</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(0,0,0)">s_list</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(0,0,0)">i</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(0,0,0)">,</span><span style="color:rgb(188,143,143)">1e6</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(0,0,0)">;</span>
<span style="color:rgb(160,32,240)">end</span>
<span style="color:rgb(0,0,0)">S_real</span><span style="color:rgb(92,92,92)">=</span><span style="color:rgb(50,185,185)">real</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(0,0,0)">s2</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(0,0,0)">;</span>
<span style="color:rgb(0,0,0)">S_imag</span><span style="color:rgb(92,92,92)">=</span><span style="color:rgb(50,185,185)">imag</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(0,0,0)">s2</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(0,0,0)">;</span>
<span style="color:rgb(0,0,0)">plot</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(0,0,0)">S_real</span><span style="color:rgb(0,0,0)">,</span> <span style="color:rgb(0,0,0)">S_imag</span><span style="color:rgb(74,85,219)">)</span></pre>Note: the function for the "Critical strip" uses vectorisation to improve speed.<br></div><div><br></div><div>Lester</div></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, 22 May 2022 at 07:31, Lester Anderson <<a href="mailto:arctica1963@gmail.com">arctica1963@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Hi all,<div><br></div><div>After a lot of trial and error, I have managed to get a set of functions to compute the approximations of Riemann's Zeta for negative and positive real values; values of n > 1e6 seem to give better results:</div><div><br></div><div><pre style="font-family:Arial"><span style="color:rgb(176,24,19)">function</span> <span style="color:rgb(131,67,16)">zs</span><span style="color:rgb(92,92,92)">=</span><span style="color:rgb(0,0,0);text-decoration-line:underline">zeta_s</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(131,67,16)">z</span><span style="color:rgb(0,0,0)">, </span><span style="color:rgb(131,67,16)">n</span><span style="color:rgb(74,85,219)">)</span>
<span style="color:rgb(100,174,100)">// Summation loop</span>
<span style="color:rgb(131,67,16)">zs</span><span style="color:rgb(92,92,92)">=</span><span style="color:rgb(188,143,143)">1</span><span style="color:rgb(0,0,0)">;</span>
<span style="color:rgb(160,32,240)">if</span> <span style="color:rgb(131,67,16)">z</span> <span style="color:rgb(92,92,92)">==</span> <span style="color:rgb(188,143,143)">0</span>
<span style="color:rgb(131,67,16)">zs</span> <span style="color:rgb(92,92,92)">=</span> <span style="color:rgb(92,92,92)">-</span><span style="color:rgb(188,143,143)">0.5</span>
<span style="color:rgb(160,32,240)">elseif</span> <span style="color:rgb(131,67,16)">z</span> <span style="color:rgb(92,92,92)">==</span> <span style="color:rgb(188,143,143)">1</span>
<span style="color:rgb(131,67,16)">zs</span> <span style="color:rgb(92,92,92)">=</span> <span style="color:rgb(218,112,214)">%inf</span>
<span style="color:rgb(160,32,240)">else</span>
<span style="color:rgb(160,32,240)">for</span> <span style="color:rgb(0,0,0)">i</span> <span style="color:rgb(92,92,92)">=</span> <span style="color:rgb(188,143,143)">2</span><span style="color:rgb(255,170,0)">:</span> <span style="color:rgb(131,67,16)">n</span><span style="color:rgb(92,92,92)">-</span><span style="color:rgb(188,143,143)">1</span>
<span style="color:rgb(131,67,16)">zs</span> <span style="color:rgb(92,92,92)">=</span> <span style="color:rgb(131,67,16)">zs</span> <span style="color:rgb(92,92,92)">+</span> <span style="color:rgb(0,0,0)">i</span><span style="color:rgb(92,92,92)">.^</span><span style="color:rgb(92,92,92)">-</span><span style="color:rgb(131,67,16)">z</span><span style="color:rgb(0,0,0)">;</span>
<span style="color:rgb(160,32,240)">end</span>
<span style="color:rgb(160,32,240)">end</span>
<span style="color:rgb(176,24,19)">endfunction</span>
<span style="color:rgb(176,24,19)">function</span> <span style="color:rgb(131,67,16)">zfn</span><span style="color:rgb(92,92,92)">=</span><span style="color:rgb(0,0,0);text-decoration-line:underline">zeta_functional_eqn</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(131,67,16)">s</span><span style="color:rgb(74,85,219)">)</span>
<span style="color:rgb(100,174,100)">// Riemann</span><span style="color:rgb(100,174,100)">'</span><span style="color:rgb(100,174,100)">s functional equation</span>
<span style="color:rgb(100,174,100)">// Analytic continuation for negative values</span>
<span style="color:rgb(131,67,16)">zfn</span> <span style="color:rgb(92,92,92)">=</span> <span style="color:rgb(188,143,143)">2.</span><span style="color:rgb(92,92,92)">^</span><span style="color:rgb(131,67,16)">s</span> <span style="color:rgb(92,92,92)">.*</span> <span style="color:rgb(218,112,214)">%pi</span><span style="color:rgb(92,92,92)">.^</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(131,67,16)">s</span> <span style="color:rgb(92,92,92)">-</span> <span style="color:rgb(188,143,143)">1</span><span style="color:rgb(74,85,219)">)</span> <span style="color:rgb(92,92,92)">.*</span> <span style="color:rgb(50,185,185)">sin</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(218,112,214)">%pi</span><span style="color:rgb(92,92,92)">.*</span><span style="color:rgb(131,67,16)">s</span><span style="color:rgb(92,92,92)">./</span><span style="color:rgb(188,143,143)">2</span><span style="color:rgb(74,85,219)">)</span> <span style="color:rgb(92,92,92)">.*</span> <span style="color:rgb(50,185,185)">gamma</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(188,143,143)">1</span> <span style="color:rgb(92,92,92)">-</span> <span style="color:rgb(131,67,16)">s</span><span style="color:rgb(74,85,219)">)</span> <span style="color:rgb(92,92,92)">.*</span> <span style="color:rgb(0,0,0);text-decoration-line:underline">zeta_s</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(188,143,143)">1</span> <span style="color:rgb(92,92,92)">-</span> <span style="color:rgb(131,67,16)">s</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(0,0,0)">,</span><span style="color:rgb(0,0,0)">n</span><span style="color:rgb(74,85,219)">)</span>
<span style="color:rgb(176,24,19)">endfunction</span></pre>For even values of s < -20 the values of Zeta(s) increase in value and are not as close to zero as expected e.g. zeta_functional_eqn(-40) gives 7.5221382. At small even values e.g. -10, the result is of the order of ~1e-18 (close enough to zero). Any ideas why the even zeta values increase or how to reduce that response? </div><div><br></div><div>The solution over the critical strip (zero to one) is not so efficient unless n is very large( > 1e8), and there seems to be a performance issue when using a for-loop compared to vectorisation. Vectorised n speeds things up quite a bit.</div><div><br></div><div><pre style="font-family:Arial"><span style="color:rgb(176,24,19)">function</span> <span style="color:rgb(131,67,16)">zs2</span><span style="color:rgb(92,92,92)">=</span><span style="color:rgb(0,0,0);text-decoration-line:underline">zeta_0_1</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(131,67,16)">s</span><span style="color:rgb(0,0,0)">, </span><span style="color:rgb(131,67,16)">n</span><span style="color:rgb(74,85,219)">)</span>
<span style="color:rgb(131,67,16)">zs2</span><span style="color:rgb(92,92,92)">=</span><span style="color:rgb(188,143,143)">0</span>
<span style="color:rgb(160,32,240)">for</span> <span style="color:rgb(0,0,0)">i</span> <span style="color:rgb(92,92,92)">=</span> <span style="color:rgb(188,143,143)">1</span><span style="color:rgb(255,170,0)">:</span> <span style="color:rgb(131,67,16)">n</span>
<span style="color:rgb(131,67,16)">zs2</span> <span style="color:rgb(92,92,92)">=</span> <span style="color:rgb(131,67,16)">zs2</span> <span style="color:rgb(92,92,92)">+</span> <span style="color:rgb(74,85,219)">(</span><span style="color:rgb(92,92,92)">-</span><span style="color:rgb(188,143,143)">1</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(92,92,92)">.^</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(0,0,0)">i</span> <span style="color:rgb(92,92,92)">+</span> <span style="color:rgb(188,143,143)">1</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(92,92,92)">./</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(0,0,0)">i</span><span style="color:rgb(92,92,92)">.^</span><span style="color:rgb(131,67,16)">s</span> <span style="color:rgb(74,85,219)">)</span><span style="color:rgb(0,0,0)">;</span>
<span style="color:rgb(160,32,240)">end</span>
<span style="color:rgb(131,67,16)">zs2</span> <span style="color:rgb(92,92,92)">=</span> <span style="color:rgb(188,143,143)">1.</span><span style="color:rgb(92,92,92)">/</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(188,143,143)">1</span> <span style="color:rgb(92,92,92)">-</span> <span style="color:rgb(188,143,143)">2.</span><span style="color:rgb(92,92,92)">^</span><span style="color:rgb(74,85,219)">(</span> <span style="color:rgb(188,143,143)">1</span><span style="color:rgb(92,92,92)">-</span><span style="color:rgb(131,67,16)">s</span> <span style="color:rgb(74,85,219)">)</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(92,92,92)">.*</span><span style="color:rgb(131,67,16)">zs2</span><span style="color:rgb(0,0,0)">;</span>
<span style="color:rgb(176,24,19)">endfunction</span>
<span style="color:rgb(176,24,19)">function</span> <span style="color:rgb(131,67,16)">zs1</span><span style="color:rgb(92,92,92)">=</span><span style="color:rgb(0,0,0);text-decoration-line:underline">zeta_0_1</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(131,67,16)">s</span><span style="color:rgb(0,0,0)">, </span><span style="color:rgb(131,67,16)">n</span><span style="color:rgb(74,85,219)">)</span>
<span style="color:rgb(100,174,100)">// Vectorised version </span>
<span style="color:rgb(131,67,16)">zs1</span><span style="color:rgb(92,92,92)">=</span><span style="color:rgb(188,143,143)">0</span>
<span style="color:rgb(0,0,0)">k</span><span style="color:rgb(92,92,92)">=</span><span style="color:rgb(50,185,185)">linspace</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(188,143,143)">1</span><span style="color:rgb(0,0,0)">,</span><span style="color:rgb(131,67,16)">n</span><span style="color:rgb(0,0,0)">,</span><span style="color:rgb(131,67,16)">n</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(0,0,0)">;</span>
<span style="color:rgb(131,67,16)">zs1</span> <span style="color:rgb(92,92,92)">=</span> <span style="color:rgb(50,185,185)">sum</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(92,92,92)">-</span><span style="color:rgb(188,143,143)">1</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(92,92,92)">.^</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(0,0,0)">k</span><span style="color:rgb(92,92,92)">+</span> <span style="color:rgb(188,143,143)">1</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(92,92,92)">./</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(0,0,0)">k</span><span style="color:rgb(92,92,92)">.^</span><span style="color:rgb(131,67,16)">s</span> <span style="color:rgb(74,85,219)">)</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(0,0,0)">;</span>
<span style="color:rgb(131,67,16)">zs1</span> <span style="color:rgb(92,92,92)">=</span> <span style="color:rgb(188,143,143)">1.</span><span style="color:rgb(92,92,92)">/</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(188,143,143)">1</span> <span style="color:rgb(92,92,92)">-</span> <span style="color:rgb(188,143,143)">2.</span><span style="color:rgb(92,92,92)">^</span><span style="color:rgb(74,85,219)">(</span> <span style="color:rgb(188,143,143)">1</span><span style="color:rgb(92,92,92)">-</span><span style="color:rgb(131,67,16)">s</span> <span style="color:rgb(74,85,219)">)</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(92,92,92)">.*</span><span style="color:rgb(131,67,16)">zs1</span><span style="color:rgb(0,0,0)">;</span>
<span style="color:rgb(176,24,19)">endfunction</span></pre>For example, calculating the approximation of Zeta(0.5) using a for-loop takes ~150s to give a value of -1.4602337981325388 (quite close), whereas the vectorised version does the computation in under 20s, both tested using n=1e8. Can the functions be optimised to improve speed and accuracy?</div><div><br></div><div>Using Scilab 6.1.1 on Windows 10 (16 Gb RAM).</div><div><br></div><div>Thanks</div><div>Lester</div> </div>
</blockquote></div>