Skip to main content

calculus and analysis - Integrating a difficult function (Numerically ?)


I've been trying to make the following integral but I get no results :


Integrate[ (3/(16 + r^2)- 4/(6.25 + r^2)) E^(-2r^2) Sin[k r] r, {r, 0, Infinity}]


I am new in Mathematica and I have tried with the function Integrate and NIntegrate. Is there any command so that I can get a result of the above integral? Thanks :D



Answer



The exact integration fails in this case. One can do this numerically. As much as I understand, you need to have the result as a function of k. If you do this numerically, the result may only be an approximate function. If this is what you agree to have, the following approach may be undertaken.


First, note that because of the factor Sin[k r] your integral is highly oscillating at large values of k. In this case, it can be easily circumvented by the replacement k r->R. Let us introduce your expression staying under the integral as


Clear[expr];
expr[k_, R_] :=
Simplify /@ (((3/(16 + r^2) - 4/(6.25 + r^2)) Exp[(-2 r^2)] Sin[k r]*

r) /. r -> R/k // Expand)

The expression takes the following form:


enter image description here


Now let us integrate, not forgetting to multiply the expression by 1/k coming from dr=dR/k:


lst = Table[{k, 
NIntegrate[expr[k, R]*1/k, {R, 0, \[Infinity]}]}, {k,
0.1, 10, 0.1}]

giving you a list of pairs with the structure {k, int[k]}. You can plot it, if you wish.



Further, if you need to have an approximate analytical function, in the end, you can fit this result to some reasonable function:


model = -a*k*Exp[-c*k^2];
ff = FindFit[lst, model, {a, c}, k]
Show[{
ListPlot[lst, PlotStyle -> Blue,
AxesLabel -> {Style["k", Italic, 16], Style["J(k)", Italic, 16]}],
Plot[model /. ff, {k, 0.1, 10}, PlotStyle -> Red]
}]
(* {a -> 0.0619, c -> 0.114} *)


where the plot is drawn to control the fitting quality:


enter image description here


Here the blue points show the results of the numerical integration, while the red solid line that of the fitting.


However, I guess you may try to do the integral analytically, but by hand. To do this, integrate the terms of the expression above separately. Replace in each of them Sin[R] by Exp[I R] and then, observing that the both integrands are even, integrate them from -infinity to +infinity and divide by 2, rather than from 0 to +infinity. Further, use the method of residuals for calculating Fourier integrals. You may have a look here for the method description: V. I. Smirnov, A Course of Higher Mathematics., 16 ed. (Pergamon Pr., Oxford, 1964), Vol. 3 Chapter 3, or somewhere else. In the end take the imaginary part of the solution.


Have fun!


Comments

Popular posts from this blog

plotting - Filling between two spheres in SphericalPlot3D

Manipulate[ SphericalPlot3D[{1, 2 - n}, {θ, 0, Pi}, {ϕ, 0, 1.5 Pi}, Mesh -> None, PlotPoints -> 15, PlotRange -> {-2.2, 2.2}], {n, 0, 1}] I cant' seem to be able to make a filling between two spheres. I've already tried the obvious Filling -> {1 -> {2}} but Mathematica doesn't seem to like that option. Is there any easy way around this or ... Answer There is no built-in filling in SphericalPlot3D . One option is to use ParametricPlot3D to draw the surfaces between the two shells: Manipulate[ Show[SphericalPlot3D[{1, 2 - n}, {θ, 0, Pi}, {ϕ, 0, 1.5 Pi}, PlotPoints -> 15, PlotRange -> {-2.2, 2.2}], ParametricPlot3D[{ r {Sin[t] Cos[1.5 Pi], Sin[t] Sin[1.5 Pi], Cos[t]}, r {Sin[t] Cos[0 Pi], Sin[t] Sin[0 Pi], Cos[t]}}, {r, 1, 2 - n}, {t, 0, Pi}, PlotStyle -> Yellow, Mesh -> {2, 15}]], {n, 0, 1}]

plotting - Plot 4D data with color as 4th dimension

I have a list of 4D data (x position, y position, amplitude, wavelength). I want to plot x, y, and amplitude on a 3D plot and have the color of the points correspond to the wavelength. I have seen many examples using functions to define color but my wavelength cannot be expressed by an analytic function. Is there a simple way to do this? Answer Here a another possible way to visualize 4D data: data = Flatten[Table[{x, y, x^2 + y^2, Sin[x - y]}, {x, -Pi, Pi,Pi/10}, {y,-Pi,Pi, Pi/10}], 1]; You can use the function Point along with VertexColors . Now the points are places using the first three elements and the color is determined by the fourth. In this case I used Hue, but you can use whatever you prefer. Graphics3D[ Point[data[[All, 1 ;; 3]], VertexColors -> Hue /@ data[[All, 4]]], Axes -> True, BoxRatios -> {1, 1, 1/GoldenRatio}]

plotting - Adding a thick curve to a regionplot

Suppose we have the following simple RegionPlot: f[x_] := 1 - x^2 g[x_] := 1 - 0.5 x^2 RegionPlot[{y < f[x], f[x] < y < g[x], y > g[x]}, {x, 0, 2}, {y, 0, 2}] Now I'm trying to change the curve defined by $y=g[x]$ into a thick black curve, while leaving all other boundaries in the plot unchanged. I've tried adding the region $y=g[x]$ and playing with the plotstyle, which didn't work, and I've tried BoundaryStyle, which changed all the boundaries in the plot. Now I'm kinda out of ideas... Any help would be appreciated! Answer With f[x_] := 1 - x^2 g[x_] := 1 - 0.5 x^2 You can use Epilog to add the thick line: RegionPlot[{y < f[x], f[x] < y < g[x], y > g[x]}, {x, 0, 2}, {y, 0, 2}, PlotPoints -> 50, Epilog -> (Plot[g[x], {x, 0, 2}, PlotStyle -> {Black, Thick}][[1]]), PlotStyle -> {Directive[Yellow, Opacity[0.4]], Directive[Pink, Opacity[0.4]],