2

I have to plot this trigonometric function:

    v1[y1_, y2_] := 7.6 NIntegrate[-(1/Sqrt[(x1 - y1)^2 + (-y2)^2]) 2/(4 Pi^2)
                  (0.71 Cos[a + ArcTan[y2/(y1 - x1)]]^2 Sin[a + ArcTan[y2/(y1 - x1)]] - 
                   0.5 Sin[a + ArcTan[y2/(y1 - x1)]]^3)/(Sin[a + ArcTan[y2/( y1 - x1)]]^4 
                  (Cot[a + ArcTan[y2/(y1 - x1)]]^2 - 0.26 + 0.51 I) 
                  (Cot[a + ArcTan[y2/(y1 - x1)]]^2 - 0.26 -0.51 I)) 1/Cos[a],
                  {a, 0, Pi}, {x1, 1 , 2}, MaxRecursion -> 4]

if I do a ContourPlotof the real part of the function like

ContourPlot[Re[v1[y1,y2]],{y1,0,5},{y2,0,5}]

I obtain something like this with some white voids

enter image description here

So, after reading How to plot the contour of f[x,y]==0 if always f[x,y]>=0 I increased the MaxRecursion and PlotPoint (here only two of of those made), but the problem remain.

 ContourPlot[Re[v1[y1,y2]],{y1,0,5},{y2,0,5},MaxRecursion->1,PlotPoint->100]

enter image description here

ContourPlot[Re[v1[y1,y2]],{y1,0,5},{y2,0,5},MaxRecursion->2,PlotPoint->20,Mesh->All]

enter image description here

Here I can see is a problem of the mesh. I tried many combination of MaxRecursion and PlotPoints, but I can't find a solution.I only have to increase more? Because I tried a MR->2, PP->100 but after 2 days Mathematica didn't give me a result. So I ask you if there is a method to parallelize it?

EDIT: Sorry I didn't talk about the regularization of my function! I took the integrand argoument without 1/Cos[a]

g[b_]= (0.71 Cos[b]^2 Sin[b] -  0.5 Sin[b]^3)/(Sin[b]^4(Cot[b]^2 - 0.26 + 0.51 I)(Cot[b]^2 - 0.26 -0.51 I))

and I regularized it with

(g[a+ ArcTan[y2/(y1 - x1)]] - g[ArcTan[y2/(y1 - x1)] + Pi/2] -
g'[ArcTan[y2/(y1 - x1)] + Pi/2] (a - Pi/2)) (1/Cos[a])

So in a=Pithe function doesn't diverge

diana
  • 65
  • 6

1 Answers1

5

You should never get to the point where you are sending a function like this to Plot or ContourPlot until you've verified that it works, and works in a reasonable amount of time. If it takes forever to evaluate but it does evaluate reliably, then you should create a list and use the corresponding ListPlot.

g = (0.71 Cos[#]^2 Sin[#] - 
      0.5 Sin[#]^3)/(Sin[#]^4 (Cot[#]^2 - 0.26 + 0.51 I) (Cot[#]^2 - 
        0.26 - 0.51 I)) &;
integrand[y1_, y2_, x1_, 
   a_] = (g[a + ArcTan[y2/(y1 - x1)]] - 
     g[ArcTan[y2/(y1 - x1)] + Pi/2] - 
     g'[ArcTan[y2/(y1 - x1)] + Pi/2] (a - Pi/2)) (1/Cos[a]);

v1[y1_?NumericQ, y2_?NumericQ, intopts : OptionsPattern[]] := 
 7.6 NIntegrate[integrand[y1, y2, x1, a], {a, 0, Pi}, {x1, 1, 2},
   Evaluate[FilterRules[{intopts}, Options[NIntegrate]]]]

Notice the v1 function takes options for NIntegrate, which allows you to tweak things like MaxRecursions or WorkingPrecision if you wish to. Next make a 2D list of values

dx = 5/35.(*Set this to a smaller value,like 0.05 for a better plot*);

Monitor[twodlist = 
   Table[Quiet@v1[y1, y2, MaxRecursion -> 5], {y2, 0, 5, dx}, {y1, 0, 
     5, dx}];, {y1, y2}]

GraphicsRow[{ListPlot3D[Re@twodlist, PlotRange -> All, 
   DataRange -> {{0, 5}, {0, 5}}, AxesLabel -> {"y2", "y1"}, 
   ColorFunction -> Hue], 
  ListContourPlot[Re[twodlist], PlotRange -> All, 
   DataRange -> {{0, 5}, {0, 5}}, FrameLabel -> {"y2", "y1"}]}, 
 ImageSize -> 600]

enter image description here

Jason B.
  • 68,381
  • 3
  • 139
  • 286