public void IntegrateOverRealPlane() { Func <double, double, double> integrand = (x, y) => Math.Exp(-x * x - y * y) / Math.PI; double result = ImproperQuadrature.IntegrateOverRealPlane(integrand, 1, 32); AssertHelper.AssertApproximatelyEqual(1, result, 4); }
public double CalculateLongitudinalElectricComponent( double effectiveTime_fm, double radialDistance_fm, double conductivity_MeV ) { Func <double, double, double> integrand = (x_fm, y_fm) => { SpatialVector pointChargePosition = new SpatialVector(radialDistance_fm - x_fm, -y_fm, 0); return(Nucleus.GetProtonNumberColumnDensity_per_fm3(x_fm, y_fm) * PointChargeEMF.CalculateElectromagneticField( EMFComponent.LongitudinalElectricComponent, effectiveTime_fm, pointChargePosition.Norm, conductivity_MeV) * pointChargePosition.Direction.X); }; double integral = ImproperQuadrature.IntegrateOverRealPlane( integrand, 2 * Nucleus.NuclearRadius_fm, QuadratureOrder); return(integral); }
public void IntegrateOverRealAxis() { Func <double, double> integrand = x => Functions.GaussianDistributionNormalized1D(x, 1); double result = ImproperQuadrature.IntegrateOverRealAxis(integrand, 2.7, 64); AssertHelper.AssertApproximatelyEqual(1, result); }
public void IntegrateOverPositiveAxis() { double diffuseness = 1; double nuclearRadius = 5; Func <double, double> integrand = r => 4 * Math.PI * r * r * Functions.WoodsSaxonPotentialNormalized3D(r, nuclearRadius, diffuseness); double result = ImproperQuadrature.IntegrateOverPositiveAxis(integrand, 2 * nuclearRadius, 64); AssertHelper.AssertApproximatelyEqual(1, result); }
protected virtual double UnnormalizedColumnDensity( double x_fm, double y_fm ) { Func <double, double> integrand = z => UnnormalizedDensity(Math.Sqrt(x_fm * x_fm + y_fm * y_fm + z * z)); double integral = ImproperQuadrature.IntegrateOverPositiveAxis(integrand, 2 * NuclearRadius_fm, 64); // factor two because integral runs from minus to plus infinity return(2 * integral); }
private double CalculateRadialElectricComponent( double effectiveTime_fm, double radialDistance_fm, double conductivity_MeV ) { if (effectiveTime_fm > 0) { Func <double, double> integrand = k => PointChargeRadialElectricComponentIntegrand( k, effectiveTime_fm, radialDistance_fm, conductivity_MeV); double integral = ImproperQuadrature.IntegrateOverPositiveAxis(integrand, 1, 64); return(2 * Coupling / conductivity_MeV * Constants.HbarC_MeV_fm * integral); } else { return(0); } }
/**************************************************************************************** * Private/protected members, functions and properties ****************************************************************************************/ private double CalculateLongitudinalElectricComponent( double effectiveTime_fm, double radialDistance_fm, double conductivity_MeV ) { if (effectiveTime_fm > 0) { Func <double, double> integrand = k => PointChargeLongitudinalElectricComponentIntegrand( k, effectiveTime_fm, radialDistance_fm, conductivity_MeV); double integral = ImproperQuadrature.IntegrateOverPositiveAxis(integrand, 1, 64); return(Coupling * PointChargeVelocity * integral); } else { return(0); } }