using static System.Math; using static System.Console; class main{ const double inf=double.PositiveInfinity; public static bool approx (double x, double y, double acc=1e-6, double eps=1e-6){ if(Abs(x-y) f; acc=1e-5; eps=0; exact = -4; WriteLine($"o8av: ∫_0^1 Log(x)/Sqrt(x)dx={exact}, acc={acc} eps={eps}"); f = delegate(double x){ ncalls++; return Log(x)/Sqrt(x);}; ncalls=0; q=quad.o8av(f,0,1,acc,eps); WriteLine($"result = {q}, result/exact={q/exact} ncalls={ncalls}"); if(approx(q,exact,acc,eps))WriteLine("test passed\n"); else {ierr++;WriteLine("test failed\n");} acc=1e-6; eps=0; exact = Sqrt(PI); WriteLine($"o8av: testing ∫_-∞^∞ exp(-x^2)dx={exact},acc={acc},eps={eps}"); f = delegate(double x){ ncalls++; return Exp(-x*x);}; ncalls=0; q=quad.o8av(f,-inf,inf,acc,eps); WriteLine($"result = {q}, result/exact={q/exact} ncalls={ncalls}"); if(approx(q,exact,acc,eps))WriteLine("test passed\n"); else {ierr++;WriteLine("test failed\n");} acc=1e-6; eps=0; exact = Sqrt(PI)/2; WriteLine($"o8av: testing ∫_0^∞ exp(-x^2)dx={exact},acc={acc},eps={eps}"); f = delegate(double x){ ncalls++; return Exp(-x*x);}; ncalls=0; q=quad.o8av(f,0,inf,acc,eps); WriteLine($"result = {q}, result/exact={q/exact} ncalls={ncalls}"); if(approx(q,exact,acc,eps))WriteLine("test passed\n"); else {ierr++;WriteLine("test failed\n");} acc=1e-6; eps=0; exact = 2; WriteLine($"o8av: testing ∫_0^1 ln(1/x)^2 dx={exact},acc={acc},eps={eps}"); f = delegate(double x){ ncalls++; return Pow(Log(1/x),2); }; ncalls=0; q=quad.o8av(f,0,1,acc,eps); WriteLine($"result = {q}, result/exact={q/exact} ncalls={ncalls}"); if(approx(q,exact,acc,eps))WriteLine("test passed\n"); else {ierr++;WriteLine("test failed\n");} acc=1e-6; eps=0; exact = 6; WriteLine($"o8av: testing ∫_0^1 ln(1/x)^3 dx={exact},acc={acc},eps={eps}"); f = delegate(double x){ ncalls++; return Pow(Log(1/x),3); }; ncalls=0; q=quad.o8av(f,0,1,acc,eps); WriteLine($"result = {q}, result/exact={q/exact} ncalls={ncalls}"); if(approx(q,exact,acc,eps))WriteLine("test passed\n"); else {ierr++;WriteLine("test failed\n");} acc=1e-6; eps=0; exact = Sqrt(PI)/2; WriteLine($"o8av: testing ∫_0^1 ln(1/x)^0.5 dx={exact},acc={acc},eps={eps}"); f = delegate(double x){ ncalls++; return Sqrt(Log(1/x)); }; ncalls=0; q=quad.o8av(f,0,1,acc,eps); WriteLine($"result = {q}, result/exact={q/exact} ncalls={ncalls}"); if(approx(q,exact,acc,eps))WriteLine("test passed\n"); else {ierr++;WriteLine("test failed\n");} WriteLine($"failed tests: {ierr}"); return ierr; } }