The precision of the argument function error message, graph not plotted

Click For Summary
The discussion centers on an error encountered while plotting graphs using a function called integratedadvthirdaltb. The user experiences "The precision of the argument function" error messages, indicating that the precision of the arguments is below the specified WorkingPrecision of 20. The first graph plots successfully despite the errors, but subsequent attempts yield a blank graph along with more precision error messages.Key issues identified include the use of imprecise constants, such as 0.967, which should be defined with higher precision (e.g., 0.967`30). Additionally, the variable x, although defined with exact endpoints, defaults to machine precision during plotting, leading to further precision issues. To resolve these problems, it is suggested to explicitly set the precision of both constants and the variable x to ensure they meet the required WorkingPrecision during calculations and plotting.
jamie_m
Messages
14
Reaction score
0
"The precision of the argument function" error message, graph not plotted

I've got a function, integratedadvthirdaltb, that I'm trying to use in plotting some graphs:

thirdaltb[KP_, Ps_, C_, M_] :=
NSolve[Sqrt[2*M]*b +
InverseCDF[NormalDistribution[0, 1], Ps]*
Sqrt[4*(InverseCDF[NormalDistribution[0, 1], Ps]^2) +
4*Sqrt[2*M]*b + (2.785398163397448309616)*M] ==
KP*C - 2*(InverseCDF[NormalDistribution[0, 1], Ps]^2), b,
WorkingPrecision -> 20]

directadv[b_] := -Log2[1 - CDF[NormalDistribution[0, 1], b]]

integratedadvthirdaltb[KP_, Ps_, C_, M_] :=
directadv[b /. thirdaltb[KP, Ps, C, M]]

So far so good. However, the first graph I've tried to plot is giving me a lot of "The precision of the argument function ({6.6073 +4\ Sqrt[2]\ \
b+1.83842\ Sqrt[58.0856 +16\Sqrt[2]\b]}\\n) is less than \
WorkingPrecision" errors (in fact, that's not the only argument function that apparently has less than WorkingPrecision.) Having WorkingPrecision->20 in the definition of the thirdaltb function, I'm at a loss as to why I'm getting these errors.

That said, the first graph does get plotted. Here's the instruction to do so

LogLinearPlot[{integratedadvthirdaltb[x, 0.967, 2^(-5.35614381),
2^(4)]}, {x, 2^(9), 2^(13)}, AxesLabel -> {KPs, advantage},
PlotLabel ->
Style["HEYSFIRST6622NONLINEAR - theoretical advantage with Ps = \
0.97"], PlotRange -> {0, 12}, PlotStyle -> {Blue},
Ticks -> {{{2^(9), Superscript[2, Log2[2^(9)]]}, {2^(10),
Superscript[2, Log2[2^(10)]]}, {2^(11),
Superscript[2, Log2[2^(11)]]}, {2^(12),
Superscript[2, Log2[2^(12)]]}, {2^(13),
Superscript[2, Log2[2^(13)]]}}, Automatic},
WorkingPrecision -> 20]

The next graph I've tried to plot, however, is completely blank. Only the axes and heading/labels appear on screen. And I'm getting a lot more "The precision of the argument function ... is less than Working Precision" messages than I was for its predecessor:

LogLinearPlot[{integratedadvthirdaltb[x, 0.967, 2^(-8), 1]}, {x,
2^(9), 2^(13)}, AxesLabel -> {KPs, advantage},
PlotLabel ->
Style["CRYPRACTHREEFOURROUNDSTWELVEBITS - theoretical advantage \
with Ps = 0.97"], PlotRange -> {0, 12}, PlotStyle -> {Red},
Ticks -> {{{2^(9), Superscript[2, Log2[2^(9)]]}, {2^(10),
Superscript[2, Log2[2^(10)]]}, {2^(11),
Superscript[2, Log2[2^(11)]]}, {2^(12),
Superscript[2, Log2[2^(12)]]}, {2^(13),
Superscript[2, Log2[2^(13)]]}}, Automatic},
WorkingPrecision -> 20]

Does anyone have any idea as to where I'm going wrong and what I should do to fix it?

Thanks!

James McLaughlin.
 
Physics news on Phys.org


I looked through the code and it seems that there are several sources of reduced precision. First, you have several imprecise constants defined, such as 0.967. I would go through and define each constant to have 30 digits of precision, like 0.967`30.

The other source of imprecision is the variable x. Even though you have defined the endpoints with exact expressions, x gets demoted down to $MachinePrecision while plotting points on the interior of the range. The way to overcome that is to explicitly increase its precision

LogLinearPlot[{integratedadvthirdaltb[SetPrecision[x, 30], 0.967`30,
2^(-5.35614381`30), 2^(4)]}...
 

Similar threads

  • · Replies 12 ·
Replies
12
Views
3K
  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 3 ·
Replies
3
Views
4K
  • · Replies 1 ·
Replies
1
Views
5K
Replies
9
Views
2K
  • · Replies 7 ·
Replies
7
Views
3K
  • · Replies 2 ·
Replies
2
Views
8K
  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 5 ·
Replies
5
Views
6K
  • · Replies 4 ·
Replies
4
Views
8K