using System; using System.Collections.Generic; using System.Linq; using System.Text; using Azimuth; namespace Azimuth.UnitTests { public class BesselFunctionTests : UnitTestSharp.TestFixture { public void AllIntegralOrders_SmallX() { var evalOut = new DenseVector(20); BesselFunction.J_AllIntegralOrders(0.623, ref evalOut); DenseVector expected = new Scalar[] { 9.05296340367585e-001, 2.96629664754228e-001, 4.69658257776098e-002, 4.91656816782477e-003, 3.84750477524405e-004, 2.40479159557114e-005, 1.25138372296984e-006, 5.57833631298634e-008, 2.17499904956167e-009, 7.53604543848024e-011, 2.34955224642239e-012, 6.65840236214234e-014, 1.72948659737250e-015, 4.14632757509882e-017, 9.22984530708138e-019, 1.91750673548736e-020, 3.73447857209680e-022, 6.84505397028993e-024, 1.18491088647308e-025, 1.94312650470616e-027, }; CheckEqual(expected, evalOut); } public void AllIntegralOrders_SmallX_Negative() { var evalOut = new DenseVector(20); BesselFunction.J_AllIntegralOrders(-0.623, ref evalOut); DenseVector expected = new Scalar[] { 9.05296340367585e-001, -2.96629664754228e-001, 4.69658257776098e-002, -4.91656816782477e-003, 3.84750477524405e-004, -2.40479159557114e-005, 1.25138372296984e-006, -5.57833631298634e-008, 2.17499904956167e-009, -7.53604543848024e-011, 2.34955224642239e-012, -6.65840236214234e-014, 1.72948659737250e-015, -4.14632757509882e-017, 9.22984530708138e-019, -1.91750673548736e-020, 3.73447857209680e-022, -6.84505397028993e-024, 1.18491088647308e-025, -1.94312650470616e-027, }; CheckEqual(expected, evalOut); } public void AllIntegralOrders_LargeX_n3() { var evalOut = new DenseVector(3); BesselFunction.J_AllIntegralOrders(300, ref evalOut); DenseVector expected = new Scalar[] { -0.0332985548763057, -0.0318874313774999, 0.0330859720004557, }; CheckEqual(expected, evalOut); } public void AllIntegralOrders_LargeX_n20() { var evalOut = new DenseVector(20); BesselFunction.J_AllIntegralOrders(300, ref evalOut); DenseVector expected = new Scalar[] { -0.0332985548763057, -0.0318874313774999, 0.0330859720004557, 0.0323285776708394, -0.0324394004470389, -0.0331936283494271, 0.0313329461687246, 0.0344469461961760, -0.0297254220129031, -0.0360323020368642, 0.0275634838906912, 0.0378698676295770, -0.0247863602645223, -0.0398527764507387, 0.0213324529721249, 0.0418438053948037, -0.0171480724326445, -0.0436729331209525, 0.0121984733456032, 0.0451367499224249, }; CheckEqual(expected, evalOut); } public void AllIntegralOrders_LargeX_n20_negative() { var evalOut = new DenseVector(20); BesselFunction.J_AllIntegralOrders(-300, ref evalOut); DenseVector expected = new Scalar[] { -0.0332985548763057, -0.0318874313774999, 0.0330859720004557, 0.0323285776708394, -0.0324394004470389, -0.0331936283494271, 0.0313329461687246, 0.0344469461961760, -0.0297254220129031, -0.0360323020368642, 0.0275634838906912, 0.0378698676295770, -0.0247863602645223, -0.0398527764507387, 0.0213324529721249, 0.0418438053948037, -0.0171480724326445, -0.0436729331209525, 0.0121984733456032, 0.0451367499224249, }; CheckEqual(expected, evalOut); } public void AllIntegralOrders_0() { var evalOut = new DenseVector(20); BesselFunction.J_AllIntegralOrders(0, ref evalOut); DenseVector expected = new Scalar[] { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; CheckEqual(expected, evalOut); } public void AllIntegralOrders_Epsilon() { var w = 0.00000000000000006352163501508065; var evalOut = new DenseVector(256); BesselFunction.J_AllIntegralOrders(w, ref evalOut); DenseVector expected = new DenseVector(256); expected[0] = 1; CheckEqual(expected, evalOut); } public void J0() { var evaluationPoints = new Scalar[] { 0, .2, .1, 30, 4, 9, 8, 1000, 300 }; var expectedValues = new Scalar[] { 1.0000000000000000, 0.9900249722395764, 0.9975015620660401, -0.0863679835810402, -0.3971498098638475, -0.0903336111828763, 0.1716508071375539, 0.0247866861524202, -0.0332985548763057, }; var actualValues = evaluationPoints.Select(x => BesselFunction.J0(x)); CheckEqual(expectedValues, actualValues); } public void J1() { var evaluationPoints = new Scalar[] { 0, .2, .1, 30, 4, 9, 8, 1000, 300, }; var expectedValues = new Scalar[] { 0.000000000000000, 0.099500832639236, 0.049937526036242, -0.118751062616623, -0.066043328023549, 0.245311786573325, 0.234636346853915, 0.004728311907090, -0.0318874313774999 }; var actualValues = evaluationPoints.Select(x => BesselFunction.J1(x)); CheckEqual(expectedValues, actualValues); } } }