Re: precisions
- To: mathgroup at smc.vnet.net
- Subject: [mg56025] Re: precisions
- From: Paul Abbott <paul at physics.uwa.edu.au>
- Date: Wed, 13 Apr 2005 01:11:14 -0400 (EDT)
- Organization: The University of Western Australia
- References: <d3g92l$t1u$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
In article <d3g92l$t1u$1 at smc.vnet.net>,
"Tun Myint Aung" <TMA at nus.edu.sg> wrote:
> I am doing a calculation involving eigenvalues and eigenvectors for
> structural mechanics. I encountered with difficulties in numerical
> calculation which is very sensitive to precisions of numerical numbers.
> I used "SetPrecision[inputdata,100] for my input data.
This does _not_ make the inputdata high precision. You need to assign
the result back to inputdata:
inputdata = SetPrecision[inputdata,100]
And this is probably not what you want to do anyway. See what happens
when you apply SetPrecision to a number:
SetPrecision[0.1, 20]
0.10000000000000000555111512312578270212`20
Note that, as the documentation says, SetPrecision will first expose any
hidden extra digits in the internal binary representation of a number,
and only after these are exhausted add trailing zeros.
> But after I got eigenvalues and eigenvectors, these numbers are
> "MachinePrecision".
Also, note that if you multiply a high precision expression by, say, 1.0
(a MachinePrecision number) then all quantities are coerced to
MachinePrecision.
Here is a trivial 2 x 2 example:
mat = {{0.1, 0.2}, {0.11, 0.21}};
Eigenvalues[mat]
{0.3131929201955638, -0.00319292019556372}
Using SetPrecision.
highprec = SetPrecision[mat, 20];
Eigenvalues[highprec]
{ 0.3131929201955637465002112916455935305`20,
-0.00319292019556374872065734089590661134`20}
> I tried to change the precision in "Eigenvalues", but there are no options
> for that. How can I set the precision for the whole notebook?
This is not the correct approach. For sensitivity analysis here are two
suggestions:
[1] you could introduce symbolic parameters. For example,
f[x_] = mat + {{0, 0}, {0, x}}
and then compute Eigenvalues[f[x]].
[2] use Interval arithmetic instead.
new = mat + 10^(-5) Interval[{-1,1}]
and then compute Eigenvalues[new]. Note that you can also compute
Eigenvector[] and Inverse[] for matrices involving Interval[].
Cheers,
Paul
--
Paul Abbott Phone: +61 8 6488 2734
School of Physics, M013 Fax: +61 8 6488 1014
The University of Western Australia (CRICOS Provider No 00126G)
35 Stirling Highway
Crawley WA 6009 mailto:paul at physics.uwa.edu.au
AUSTRALIA http://physics.uwa.edu.au/~paul