Kaynağa Gözat

python generated test data for C++ tests

Konstantin Ladutenko 4 yıl önce
ebeveyn
işleme
3813917e66

+ 54 - 18
tests/special-functions-test-generator.py

@@ -4,17 +4,17 @@ import numpy as np
 Du_test = [
 # // x, [Re(m), Im(m)], Qext, Qsca, test_name
 [0.099, [0.75,0], 7.417859e-06, 7.417859e-06, 'a'],
-# [0.101, [0.75,0], 8.033538e-06, 8.033538e-06, 'b'],
-# [10,    [0.75,0],     2.232265, 2.232265, 'c'],
-# [1000,  [0.75,0],     1.997908, 1.997908, 'd'],
-# [100,   [1.33,-1e-5], 2.101321, 2.096594, 'e'],
-# [10000, [1.33,-1e-5], 2.004089, 1.723857, 'f'],
-# [0.055, [1.5, -1],    0.101491, 1.131687e-05, 'g'],
-# [0.056, [1.5, -1],   0.1033467, 1.216311e-05, 'h'],
-# [100,   [1.5, -1],    2.097502, 1.283697, 'i'],
-# [10000, [1.5, -1],    2.004368, 1.236574, 'j'],
-# [1,     [10,  -10],   2.532993, 2.049405, 'k'],
-# [100,   [10,  -10,],  2.071124, 1.836785, 'l'],
+[0.101, [0.75,0], 8.033538e-06, 8.033538e-06, 'b'],
+[10,    [0.75,0],     2.232265, 2.232265, 'c'],
+[1000,  [0.75,0],     1.997908, 1.997908, 'd'],
+[100,   [1.33,-1e-5], 2.101321, 2.096594, 'e'],
+[10000, [1.33,-1e-5], 2.004089, 1.723857, 'f'],
+[0.055, [1.5, -1],    0.101491, 1.131687e-05, 'g'],
+[0.056, [1.5, -1],   0.1033467, 1.216311e-05, 'h'],
+[100,   [1.5, -1],    2.097502, 1.283697, 'i'],
+[10000, [1.5, -1],    2.004368, 1.236574, 'j'],
+[1,     [10,  -10],   2.532993, 2.049405, 'k'],
+[100,   [10,  -10,],  2.071124, 1.836785, 'l'],
 [10000, [10,  -10],   2.005914, 1.795393, 'm'],
 [80, [1.05,  1],   0, 0, 'Yang'],
 ]
@@ -30,27 +30,63 @@ def get_z_values(du_list):
         zlist.append(z)
     return zlist
 
+
+# APPLIED OPTICS / Vol. 53, No. 31 / 1 November 2014, eq(13)
+def LeRu_cutoff(z):
+    x = mp.fabs(z)
+    return int(x + 11 * x**(1/3) + 1)
+
+
+def get_n_list(z, max_number_of_elements = 10):
+    nmax = LeRu_cutoff(z)
+    factor = nmax**(1/(max_number_of_elements-2))
+    n_list = [int(factor**i) for i in range(max_number_of_elements-1) ]
+    n_list.append(0)
+    n_set = set(n_list)
+    return sorted(n_set)
+
 # Riccati-Bessel z*j_n(z)
 def psi(n,z):
-    return mp.sqrt( (mp.pi * z)/2 ) * mp.besselj(n+1/2,z)
+    return mp.sqrt( (mp.pi * z)/2 ) * mp.autoprec(mp.besselj)(n+1/2,z)
+
 
 # to compare r(n,z) with Wolfram Alpha
 # n=49, z=1.3-2.1i,  SphericalBesselJ[n-1,z]/SphericalBesselJ[n,z]
 def r(n,z):
     return psi(n-1,z)/psi(n,z)
 
+
 def D1(n,z):
     return r(n,z) - n/z
 
+
 def main ():
-    mp.mp.dps = 62
+    mp.mp.dps = 15
     output_dps = 10
-
+    elements_of_n_list = 15
+    out_filename = 'test_spec_functions_data.h'
     zlist = get_z_values(Du_test)
+    output_str = ('// complex(z), n, complex(D1_n(z)), abs_err_real, abs_err_imag\n'+
+            'D1_test_'+str(output_dps)+'digits = {\n')
     for z in zlist:
-        print(z)
+        n_list = get_n_list(z, elements_of_n_list)
+        print(z, n_list)
         for n in n_list:
-            print('{',mp.nstr(D1(n,z).real, output_dps),',',
-                  mp.nstr(D1(n,z).imag, output_dps),'}')
-
+            try:
+                D1nz = D1(n,z)
+            except:
+                pass
+            print(z, n)
+            output_str+=('{{'+
+                  mp.nstr(z.real, output_dps)+','+
+                  mp.nstr(z.imag, output_dps)+'},'+
+                  str(n)+',{'+
+                  mp.nstr(D1nz.real, output_dps)+','+
+                  mp.nstr(D1nz.imag, output_dps)+'},'+
+                  mp.nstr(mp.fabs(D1nz.real* 10**-output_dps),2)+',' +
+                  mp.nstr(mp.fabs(D1nz.imag* 10**-output_dps),2)+
+                  '},\n')
+    output_str += '};\n'
+    with open(out_filename, 'w') as out_file:
+        out_file.write(output_str)
 main()

+ 2 - 2
tests/test_Riccati_Bessel_logarithmic_derivative.cc

@@ -79,9 +79,9 @@ for (int i = 0; i < Dtest_n.size(); i++) {
               abs_tol) << "b at n=" << n;
   if (n < Dold.size()-15) {
     EXPECT_NEAR(std::real(Dold[n]), std::real(Dtest_D1[i]),
-             abs_tol) << "old at n=" << n;
+                abs_tol) << "old at n=" << n;
     EXPECT_NEAR(std::imag(Dold[n]), std::imag(Dtest_D1[i]),
-               abs_tol) << "old at n=" << n;
+                abs_tol) << "old at n=" << n;
   }
 
 }

+ 167 - 0
tests/test_spec_functions_data.h

@@ -0,0 +1,167 @@
+// complex(z), n, complex(D1_n(z)), abs_err_real, abs_err_imag
+D1_test_10digits = {
+{{0.07425,0.0},0,{13.44325437,0.0},1.3e-9,0.0},
+{{0.07425,0.0},1,{26.9211746,0.0},2.7e-9,0.0},
+{{0.07425,0.0},2,{40.39343233,0.0},4.0e-9,0.0},
+{{0.07425,0.0},3,{53.86380341,0.0},5.4e-9,0.0},
+{{0.07425,0.0},4,{67.33331708,0.0},6.7e-9,0.0},
+{{0.07425,0.0},5,{80.80236911,0.0},8.1e-9,0.0},
+{{0.07575,0.0},0,{13.17606047,0.0},1.3e-9,0.0},
+{{0.07575,0.0},1,{26.38748778,0.0},2.6e-9,0.0},
+{{0.07575,0.0},2,{39.59313798,0.0},4.0e-9,0.0},
+{{0.07575,0.0},3,{52.79686337,0.0},5.3e-9,0.0},
+{{0.07575,0.0},4,{65.99971402,0.0},6.6e-9,0.0},
+{{0.07575,0.0},5,{79.2020937,0.0},7.9e-9,0.0},
+{{7.5,0.0},0,{0.3695472563,0.0},3.7e-11,0.0},
+{{7.5,0.0},1,{-4.366784044,0.0},4.4e-10,0.0},
+{{7.5,0.0},2,{-0.05084479599,0.0},5.1e-12,0.0},
+{{7.5,0.0},3,{1.818058207,0.0},1.8e-10,0.0},
+{{7.5,0.0},4,{-1.311710105,0.0},1.3e-10,0.0},
+{{7.5,0.0},6,{0.2403642874,0.0},2.4e-11,0.0},
+{{7.5,0.0},8,{0.7288779052,0.0},7.3e-11,0.0},
+{{7.5,0.0},10,{1.101289076,0.0},1.1e-10,0.0},
+{{7.5,0.0},13,{1.589646926,0.0},1.6e-10,0.0},
+{{7.5,0.0},17,{2.188751726,0.0},2.2e-10,0.0},
+{{7.5,0.0},23,{3.043335945,0.0},3.0e-10,0.0},
+{{7.5,0.0},29,{3.875196649,0.0},3.9e-10,0.0},
+{{750.0,0.0},0,{-0.8951915139,0.0},9.0e-11,0.0},
+{{750.0,0.0},1,{1.11408472,0.0},1.1e-10,0.0},
+{{750.0,0.0},2,{-0.902418112,0.0},9.0e-11,0.0},
+{{750.0,0.0},4,{-0.9194850799,0.0},9.2e-11,0.0},
+{{750.0,0.0},7,{1.036430596,0.0},1.0e-10,0.0},
+{{750.0,0.0},13,{0.8757018925,0.0},8.8e-11,0.0},
+{{750.0,0.0},22,{-1.815460808,0.0},1.8e-10,0.0},
+{{750.0,0.0},37,{-0.09706808407,0.0},9.7e-12,0.0},
+{{750.0,0.0},63,{3.48919216,0.0},3.5e-10,0.0},
+{{750.0,0.0},106,{2.047703815,0.0},2.0e-10,0.0},
+{{750.0,0.0},179,{2.897582684,0.0},2.9e-10,0.0},
+{{750.0,0.0},301,{-1.225776221,0.0},1.2e-10,0.0},
+{{750.0,0.0},505,{-1.656090429,0.0},1.7e-10,0.0},
+{{750.0,0.0},850,{0.5377162125,0.0},5.4e-11,0.0},
+{{133.0,-0.001},0,{0.5694948984,0.001324324427},5.7e-11,1.3e-13},
+{{133.0,-0.001},1,{-1.786944016,0.004193067843},1.8e-10,4.2e-13},
+{{133.0,-0.001},2,{0.5399040216,0.001291157105},5.4e-11,1.3e-13},
+{{133.0,-0.001},3,{-1.955480626,0.004823242927},2.0e-10,4.8e-13},
+{{133.0,-0.001},5,{-2.331337153,0.006433469776},2.3e-10,6.4e-13},
+{{133.0,-0.001},7,{-3.148105563,0.0109075073},3.1e-10,1.1e-12},
+{{133.0,-0.001},11,{-46.98874439,2.213832763},4.7e-9,2.2e-10},
+{{133.0,-0.001},16,{-0.5501021158,0.001287235517},5.5e-11,1.3e-13},
+{{133.0,-0.001},25,{-0.3725033244,0.001102012526},3.7e-11,1.1e-13},
+{{133.0,-0.001},37,{-0.08821053424,0.0009282963955},8.8e-12,9.3e-14},
+{{133.0,-0.001},56,{1.124686918,0.002084471601},1.1e-10,2.1e-13},
+{{133.0,-0.001},84,{0.9986800187,0.001593722368},1.0e-10,1.6e-13},
+{{133.0,-0.001},126,{-0.2163519301,0.0001421781658},2.2e-11,1.4e-14},
+{{133.0,-0.001},190,{1.032740304,1.499507085e-5},1.0e-10,1.5e-15},
+{{13300.0,-0.1},0,{-0.06692914071,0.1001189584},6.7e-12,1.0e-11},
+{{13300.0,-0.1},1,{4.616651032,6.898387416},4.6e-10,6.9e-10},
+{{13300.0,-0.1},2,{-0.06715345623,0.1001219831},6.7e-12,1.0e-11},
+{{13300.0,-0.1},4,{-0.06767688503,0.1001290804},6.8e-12,1.0e-11},
+{{13300.0,-0.1},8,{-0.069621371,0.1001559296},7.0e-12,1.0e-11},
+{{13300.0,-0.1},18,{-0.0797264006,0.1003077197},8.0e-12,1.0e-11},
+{{13300.0,-0.1},38,{-0.122593317,0.1011803444},1.2e-11,1.0e-11},
+{{13300.0,-0.1},80,{-0.318026153,0.1098564358},3.2e-11,1.1e-11},
+{{13300.0,-0.1},167,{0.4753499708,0.1224512411},4.8e-11,1.2e-11},
+{{13300.0,-0.1},349,{0.05202548332,0.09987187722},5.2e-12,1.0e-11},
+{{13300.0,-0.1},725,{0.6178835263,0.1379545294},6.2e-11,1.4e-11},
+{{13300.0,-0.1},1508,{0.6178835263,0.1379545294},6.2e-11,1.4e-11},
+{{13300.0,-0.1},3137,{0.6178835263,0.1379545294},6.2e-11,1.4e-11},
+{{13300.0,-0.1},6522,{0.6178835263,0.1379545294},6.2e-11,1.4e-11},
+{{13300.0,-0.1},13560,{0.6178835263,0.1379545294},6.2e-11,1.4e-11},
+{{0.0825,-0.055},0,{8.364112571,5.612760191},8.4e-10,5.6e-10},
+{{0.0825,-0.055},1,{16.76671786,11.19981666},1.7e-9,1.1e-9},
+{{0.0825,-0.055},2,{25.16303989,16.7910761},2.5e-9,1.7e-9},
+{{0.0825,-0.055},3,{33.55726711,22.38373456},3.4e-9,2.2e-9},
+{{0.0825,-0.055},4,{41.95054208,27.97702858},4.2e-9,2.8e-9},
+{{0.0825,-0.055},5,{50.34330427,33.57066471},5.0e-9,3.4e-9},
+{{0.084,-0.056},0,{8.213762654,5.513194605},8.2e-10,5.5e-10},
+{{0.084,-0.056},1,{16.46671762,11.00021676},1.6e-9,1.1e-9},
+{{0.084,-0.056},2,{24.71327517,16.49151877},2.5e-9,1.6e-9},
+{{0.084,-0.056},3,{32.95769986,21.98424533},3.3e-9,2.2e-9},
+{{0.084,-0.056},4,{41.20115497,27.47761902},4.1e-9,2.7e-9},
+{{0.084,-0.056},5,{49.44408799,32.97134106},4.9e-9,3.3e-9},
+{{150.0,-100.0},0,{0.0,1.0},0.0,1.0e-10},
+{{150.0,-100.0},1,{2.843446142e-5,0.9999879975},2.8e-15,1.0e-10},
+{{150.0,-100.0},2,{8.530546308e-5,0.9999639945},8.5e-15,1.0e-10},
+{{150.0,-100.0},3,{0.0001706171621,0.999927995},1.7e-14,1.0e-10},
+{{150.0,-100.0},5,{0.0004265896666,0.9998200323},4.3e-14,1.0e-10},
+{{150.0,-100.0},8,{0.001024076947,0.9995683282},1.0e-13,1.0e-10},
+{{150.0,-100.0},12,{0.002219966552,0.9990658009},2.2e-13,1.0e-10},
+{{150.0,-100.0},19,{0.00541495427,0.997731511},5.4e-13,1.0e-10},
+{{150.0,-100.0},29,{0.01243396296,0.9948425685},1.2e-12,9.9e-11},
+{{150.0,-100.0},44,{0.02848384439,0.9884552746},2.8e-12,9.9e-11},
+{{150.0,-100.0},68,{0.06852918356,0.9738438113},6.9e-12,9.7e-11},
+{{150.0,-100.0},104,{0.164201632,0.9465214232},1.6e-11,9.5e-11},
+{{150.0,-100.0},159,{0.3932026881,0.9219145678},3.9e-11,9.2e-11},
+{{150.0,-100.0},242,{0.8377117489,1.000484617},8.4e-11,1.0e-10},
+{{15000.0,-10000.0},0,{0.0,1.0},0.0,1.0e-10},
+{{15000.0,-10000.0},1,{2.840269586e-9,0.9999999988},2.8e-19,1.0e-10},
+{{15000.0,-10000.0},2,{8.520808278e-9,0.9999999964},8.5e-19,1.0e-10},
+{{15000.0,-10000.0},4,{2.840269486e-8,0.9999999882},2.8e-18,1.0e-10},
+{{15000.0,-10000.0},9,{1.278121319e-7,0.9999999467},1.3e-17,1.0e-10},
+{{15000.0,-10000.0},20,{5.964567324e-7,0.9999997514},6.0e-17,1.0e-10},
+{{15000.0,-10000.0},43,{2.686897907e-6,0.9999988803},2.7e-16,1.0e-10},
+{{15000.0,-10000.0},92,{1.215073423e-5,0.9999949366},1.2e-15,1.0e-10},
+{{15000.0,-10000.0},197,{5.53950539e-5,0.9999769175},5.5e-15,1.0e-10},
+{{15000.0,-10000.0},420,{0.0002511344986,0.999895384},2.5e-14,1.0e-10},
+{{15000.0,-10000.0},893,{0.001134288579,0.9995280733},1.1e-13,1.0e-10},
+{{15000.0,-10000.0},1901,{0.001134288579,0.9995280733},1.1e-13,1.0e-10},
+{{15000.0,-10000.0},4046,{0.001134288579,0.9995280733},1.1e-13,1.0e-10},
+{{15000.0,-10000.0},8608,{0.109468195,0.9613901874},1.1e-11,9.6e-11},
+{{15000.0,-10000.0},18317,{0.512261042,0.9302107991},5.1e-11,9.3e-11},
+{{10.0,-10.0},0,{3.763440753e-9,1.000000002},3.8e-19,1.0e-10},
+{{10.0,-10.0},1,{0.005248614454,0.9997237555},5.2e-13,1.0e-10},
+{{10.0,-10.0},2,{0.01576496554,0.9992608599},1.6e-12,1.0e-10},
+{{10.0,-10.0},3,{0.0315795257,0.9987938656},3.2e-12,1.0e-10},
+{{10.0,-10.0},4,{0.05271773637,0.998603545},5.3e-12,1.0e-10},
+{{10.0,-10.0},5,{0.07917268804,0.999072454},7.9e-12,1.0e-10},
+{{10.0,-10.0},7,{0.1476045441,1.003978155},1.5e-11,1.0e-10},
+{{10.0,-10.0},9,{0.2346177787,1.017876304},2.3e-11,1.0e-10},
+{{10.0,-10.0},13,{0.4450367874,1.083665863},4.5e-11,1.1e-10},
+{{10.0,-10.0},17,{0.6733177541,1.19601528},6.7e-11,1.2e-10},
+{{10.0,-10.0},23,{1.014224553,1.417540161},1.0e-10,1.4e-10},
+{{10.0,-10.0},30,{1.399662665,1.715674914},1.4e-10,1.7e-10},
+{{10.0,-10.0},41,{1.985691335,2.220650533},2.0e-10,2.2e-10},
+{{1000.0,-1000.0},0,{0.0,1.0},0.0,1.0e-10},
+{{1000.0,-1000.0},1,{5.002499999e-7,0.9999999997},5.0e-17,1.0e-10},
+{{1000.0,-1000.0},3,{3.001500007e-6,0.9999999985},3.0e-16,1.0e-10},
+{{1000.0,-1000.0},5,{7.503750051e-6,0.9999999963},7.5e-16,1.0e-10},
+{{1000.0,-1000.0},9,{2.251125049e-5,0.999999989},2.3e-15,1.0e-10},
+{{1000.0,-1000.0},16,{6.803400443e-5,0.9999999683},6.8e-15,1.0e-10},
+{{1000.0,-1000.0},29,{0.0002176087921,0.9999999148},2.2e-14,1.0e-10},
+{{1000.0,-1000.0},52,{0.0006893448117,0.9999998928},6.9e-14,1.0e-10},
+{{1000.0,-1000.0},91,{0.002094046292,1.000001147},2.1e-13,1.0e-10},
+{{1000.0,-1000.0},160,{0.006443127538,1.000017553},6.4e-13,1.0e-10},
+{{1000.0,-1000.0},282,{0.01995789049,1.000189355},2.0e-12,1.0e-10},
+{{1000.0,-1000.0},497,{0.06179308868,1.001878517},6.2e-12,1.0e-10},
+{{1000.0,-1000.0},874,{0.1880146541,1.017448354},1.9e-11,1.0e-10},
+{{1000.0,-1000.0},1538,{0.5243891844,1.12904956},5.2e-11,1.1e-10},
+{{100000.0,-100000.0},0,{0.0,1.0},0.0,1.0e-10},
+{{100000.0,-100000.0},1,{5.000026759e-11,1.0},5.0e-21,1.0e-10},
+{{100000.0,-100000.0},2,{1.500006925e-10,1.0},1.5e-20,1.0e-10},
+{{100000.0,-100000.0},6,{1.050005267e-9,1.0},1.1e-19,1.0e-10},
+{{100000.0,-100000.0},15,{6.000029993e-9,1.0},6.0e-19,1.0e-10},
+{{100000.0,-100000.0},38,{3.705018531e-8,1.0},3.7e-18,1.0e-10},
+{{100000.0,-100000.0},95,{2.2800114e-7,1.0},2.3e-17,1.0e-10},
+{{100000.0,-100000.0},238,{1.42205711e-6,1.0},1.4e-16,1.0e-10},
+{{100000.0,-100000.0},594,{8.835794179e-6,1.0},8.8e-16,1.0e-10},
+{{100000.0,-100000.0},1481,{5.48713243e-5,1.000000001},5.5e-15,1.0e-10},
+{{100000.0,-100000.0},3689,{5.48713243e-5,1.000000001},5.5e-15,1.0e-10},
+{{100000.0,-100000.0},9189,{5.48713243e-5,1.000000001},5.5e-15,1.0e-10},
+{{100000.0,-100000.0},22888,{5.48713243e-5,1.000000001},5.5e-15,1.0e-10},
+{{100000.0,-100000.0},57009,{5.48713243e-5,1.000000001},5.5e-15,1.0e-10},
+{{100000.0,-100000.0},141994,{5.48713243e-5,1.000000001},5.5e-15,1.0e-10},
+{{84.0,80.0},0,{0.0,-1.0},0.0,1.0e-10},
+{{84.0,80.0},1,{7.464603828e-5,-0.9999958865},7.5e-15,1.0e-10},
+{{84.0,80.0},2,{0.0002239401908,-0.9999876764},2.2e-14,1.0e-10},
+{{84.0,80.0},3,{0.0004478865907,-0.9999754034},4.5e-14,1.0e-10},
+{{84.0,80.0},4,{0.0007464913899,-0.9999591179},7.5e-14,1.0e-10},
+{{84.0,80.0},7,{0.002090346657,-0.9998869455},2.1e-13,1.0e-10},
+{{84.0,80.0},10,{0.00410652709,-0.9997821013},4.1e-13,1.0e-10},
+{{84.0,80.0},15,{0.008962111818,-0.9995465291},9.0e-13,1.0e-10},
+{{84.0,80.0},23,{0.02062416631,-0.9990784658},2.1e-12,1.0e-10},
+{{84.0,80.0},35,{0.04711100816,-0.998528013},4.7e-12,1.0e-10},
+{{84.0,80.0},51,{0.09908951742,-0.9995117599},9.9e-12,1.0e-10},
+{{84.0,80.0},77,{0.2216380379,-1.012470814},2.2e-11,1.0e-10},
+{{84.0,80.0},114,{0.4554315865,-1.075499094},4.6e-11,1.1e-10},
+{{84.0,80.0},170,{0.8526912334,-1.272209503},8.5e-11,1.3e-10},
+};