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

Click For Summary
SUMMARY

The discussion focuses on resolving the "The precision of the argument function" error encountered while plotting graphs using the integratedadvthirdaltb function in Mathematica. The user experiences issues with precision settings, specifically with constants and variable definitions that lead to errors during graph plotting. Key recommendations include defining constants with higher precision (e.g., 0.967`30) and ensuring that the variable x is explicitly set to a higher precision using SetPrecision. Following these adjustments allows for successful graph plotting without precision errors.

PREREQUISITES
  • Understanding of Mathematica syntax and functions
  • Familiarity with numerical precision concepts in computational mathematics
  • Knowledge of statistical distributions, particularly NormalDistribution
  • Experience with plotting functions in Mathematica, such as LogLinearPlot
NEXT STEPS
  • Learn how to define constants with arbitrary precision in Mathematica
  • Explore the use of SetPrecision for variables in Mathematica
  • Investigate the implications of WorkingPrecision settings in Mathematica functions
  • Study the behavior of numerical methods in Mathematica when dealing with precision errors
USEFUL FOR

Mathematica users, data analysts, and researchers who require precise numerical computations and graphing capabilities in their work.

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
14K
  • · Replies 2 ·
Replies
2
Views
8K
  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 5 ·
Replies
5
Views
6K