Re: How to use error message return values
- To: mathgroup at smc.vnet.net
- Subject: [mg37737] Re: How to use error message return values
- From: "Allan Hayes" <hay at haystack.demon.co.uk>
- Date: Sun, 10 Nov 2002 05:38:44 -0500 (EST)
- References: <aqi79f$6a4$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Flip,
Here is an example that you may be able to modify for your own use:
It would be better to use the option Modulus for inserting the modulus to
use - since this is the way that it is done in several built-in functions.
Clear["`*"]
RIM::usage= "RIM[s,r,m],for positive integers, s, r and non-negative integer
m, constructs an s by s square matrix of integers between -r and r and tests
to see if it is invertible modulo m. If it is not invertable it announces
this in a message and invites the user to try again"
RIM[n___] :=
Module[{s, r, m, thr, mat},
mat /;
Which[
Length[{n}] != 3,
Message[RIM::argrx, RIM, Length[{n}], 3];
False,
!MatchQ[{n}, {(i__Integer)?Positive, _Integer?NonNegative}],
Message[RIM::npos];
False,
{s, r, m} = {n};
mat = Table[Random[Integer, {-r, r}], {s}, {s}];
Det[mat, Modulus -> m] == 0,
Message[RIM::sing, mat, m];
False,
True, True
]
];
DEFINE MESSAGES
I also use the built-in message argrx which is described in the Help Browser
[ Other Information]
RIM::npos=
"The first two arguments of RIM must be positive integers, the last one
\
must be a non-negative integer.";
RIM::sing=
"the matrix `1` created by RIM was not invertible Modulo `2`, please try
\
again.";
TESTS
RIM[3,5,-2,3]
RIM::argrx: RIM called with 4 arguments; 3 arguments are expected.
RIM[3,5,-2,3]
RIM[3,5,-2]
RIM::npos: The first two arguments of RIM must be positive integers, the
last \
one must be a non-negative integer.
RIM[3,5,-2]
RIM[3,5,0]
{{4,-5,1},{0,3,0},{5,-3,2}}
RIM[3,5,5]
{{1,-2,4},{4,5,4},{-4,2,1}}
RIM[3,5,5]
RIM::sing: the matrix {{-4,-4,-1},{2,5,-1},{-3,-1,2}} created by RIM was
not \
invertible Modulo 5, please try again.
RIM[3,5,5]
--
Allan
---------------------
Allan Hayes
Mathematica Training and Consulting
Leicester UK
www.haystack.demon.co.uk
hay at haystack.demon.co.uk
Voice: +44 (0)116 271 4198
Fax: +44 (0)870 164 0565
"flip" <flip_alpha at safebunch.com> wrote in message
news:aqi79f$6a4$1 at smc.vnet.net...
> Hello,
>
> I have a module which allows a user to definea matrix.
>
> This matrix may, of course, have an inverse or not have an inverse.
>
> As an example,
>
> In[15]:=
> c = {{5, 17}, {4, 15}};
>
> In[16]:=
> cinv = Inverse[c, Modulus -> 26]
>
> Out[16]=
> {{17, 5}, {18, 23}}
>
> In[17]:=
> c = {{5, 5}, {5, 5}};
>
> In[18]:=
> cinv = Inverse[c, Modulus -> 26]
>
> Inverse::"sing": "Matrix \!\({\(\({5, 5}\)\), \(\({5, 5}\)\)}\) is
> singular."
>
> Out[18]=
> Inverse[{{5, 5}, {5, 5}}, Modulus -> 26]
>
> How can I have my module fail in the case where an inverse does not exist?
> I want to end the module and give the user an error message stating to use
a
> new matrix: this one does not have an inverse modulo 26.
>
> How can we in general take advantage of error messages or error return
> values in order to do this?
>
> Thanks, Flip
>
> Note: remove "_alpha" to send me an email.
>
>
>