Re: Plot resolution
- To: mathgroup at smc.vnet.net
- Subject: [mg65081] Re: [mg65064] Plot resolution
- From: "Carl K. Woll" <carlw at wolfram.com>
- Date: Tue, 14 Mar 2006 05:59:57 -0500 (EST)
- References: <200603130459.XAA26855@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Laurentiu Caramete wrote:
> Hi,
>
> I got a problem with a plot of a function. The function 'pressure' should
> decrease monotonically with r. The Plot function is giving a non-monotonic
> plot at big r, this is a problem with the resolution of the plot or with the
> function? How can I check that?
>
> \!\(Clear[r]\[IndentingNewLine]
> \(ro = 10\^3;\)\[IndentingNewLine]
> \(pressure =
> p[r] /. \(DSolve[{D[p[r], r] ==
> 1\/\(\(r\^2\) \((1 + r)\)\^3\) -
> Log[1 + r]\/\(\(r\^3\) \((1 + r)\)\^2\),
> p[ro] == 10\^\(-7\)}, p[r],
> r]\)[\([1]\)];\)\[IndentingNewLine]\[IndentingNewLine]
> Plot[pressure, {r, ro, 10\^4}, PlotRange -> All]\)
>
>
> Thanks
>
The problem is that Plot uses machine numbers as arguments to your
function, and evaluation of the function is running into numerical
cancellation errors. You need to figure out some way to use higher
precision. One idea is to change your pressure definition so that
pressure is a function instead of an expression:
pressure = p /.
DSolve[
{
D[p[r], r] == 1/(r^2*(1 + r)^3) - Log[1 + r]/(r^3*(1 + r)^2),
p[ro] == 1/10^7
},
p,
r][[1]];
Notice that I used p instead of p[r]. Now, we create a new function,
npressure, which increases the precision of its argument before
computing the pressure:
npressure[r_?NumericQ] := pressure[SetPrecision[r, 30]]
Plotting npressure experiences no numerical instability:
Plot[npressure[r],{r,ro,10^4},PlotRange->All]
Carl Woll
Wolfram Research
- References:
- Plot resolution
- From: "Laurentiu Caramete" <laurentiu.caramete@googlemail.com>
- Plot resolution