MathGroup Archive 2010

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Test function argument with VectorQ and NumericQ

  • To: mathgroup at smc.vnet.net
  • Subject: [mg107326] Re: Test function argument with VectorQ and NumericQ
  • From: Bill Rowe <readnews at sbcglobal.net>
  • Date: Tue, 9 Feb 2010 02:45:52 -0500 (EST)

On 2/8/10 at 7:54 AM, janitor048 at googlemail.com (Oliver Fochler)
wrote:

>in order to get my NIntegrate running properly it seems that I need
>to ensure that my functions actually take numeric arguments (without
>NIntegrate trying to do some symbolic stuff before).

>For a simple case something like

>f[x_?NumericQ] := (stuff)

>seems to work fine. However, I do use vectors (lists) as function
>arguments, i.e. f[x_, y_]:= (stuff) needs to be called as f[
>{1,2,3}, 4]. How do I test this for numerical values? I know that I
>can use VectorQ[ x, NumericQ ] to check whether x is a vector that
>contains only numeric values.

>But how do I combine this into a pattern test, that can be used in
>an argument list? I would appreciate any help!

You could use a conditional test instead of a pattern test. For example,

In[7]:= f[x_?VectorQ] := Total[x] /; And @@ (NumericQ /@ x)

In[8]:= f[RandomReal[1, 10]]

Out[8]= 4.46125

In[9]:= f[{a, b, c}]

Out[9]= f({a,b,c})

or if you prefer,

In[11]:= g[x_?(VectorQ[#, NumericQ] &)] := Total[x]

In[12]:= g[RandomReal[1, 10]]

Out[12]= 3.52661

In[13]:= g[{a, b, c}]

Out[13]= g({a,b,c})

Note, I've not tested these with large data sets. So, there may
be significant execution speed differences between these two options.



  • Prev by Date: Re: Test function argument with VectorQ and NumericQ
  • Next by Date: Re: How fast does & perform?
  • Previous by thread: Re: Test function argument with VectorQ and NumericQ
  • Next by thread: Re: Test function argument with VectorQ and NumericQ