Take the 2-minute tour ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

So I've been trying to evaluate the following integral in Mathematica 8.0 Student version:

opsnum[a_, \[Omega]_] := (c^5*(3*10^25))/\[HBar]*
      NIntegrate[\[Rho][y, \[Omega]]/
        Hubble[y, \[Omega]]*(1/Hubble[z, \[Omega]])^3, {y, 
        a, \[Infinity]}, {z, a, y}]

with

    Hubble[z_, \[Omega]_] := 
 H0 Sqrt[\[CapitalOmega]M (1 + z)^3 + \[CapitalOmega]\[Gamma] (1 + 
      z)^4 + \[CapitalOmega]\[CapitalLambda] ((1 + 
       z)^(3*(1 + \[Omega])))]

\[Chi][a_, \[Omega]_] := 
 NIntegrate[c/Hubble[z, \[Omega]], {z, a, \[Infinity]}]
\[Rho][a_, \[Omega]_] := (3*Matter[a, \[Omega]])/(
 4 \[Pi]*(\[Chi][a, \[Omega]])^3)

My problem is that this refuses to converge, and gives me an NIntegrate::inumr error, due to the nested integral nature of the function. Furthermore, I cannot think of another definition for the function as it relies on the cube of an integral which has limits different from the limits of the total integrand, of which it is a part.

Anyone got any ideas? I would be eternally grateful!

share|improve this question
    
You've got undefined terms, so NIntegrate can't evaluate; that's what inumr means. A simpler example is NIntegrate[a, {t, 0, 1}]. –  Mark McClure Dec 10 '12 at 19:49
    
sorry, I meant to include that the variables are defined in my table, which is where the function's values are displayed. –  Gokotai Dec 10 '12 at 20:01
    
Welcome to Mathematica.SE! I suggest the following: 1) As you receive help, try to give it too, by answering questions in your area of expertise. 2) Read the faq! 3) When you see good questions and answers, vote them up by clicking the gray triangles, because the credibility of the system is based on the reputation gained by users sharing their knowledge. Also, please remember to accept the answer, if any, that solves your problem, by clicking the checkmark sign! –  chris Dec 10 '12 at 20:15
    
You get that error because some or all of your variables don't have a numerical value. I don't know what you mean by saying that they are defined in your table, but apparently they weren't defined at the time of execution of the NIntegrate. Please provide more details about what you were doing. –  Sjoerd C. de Vries Dec 10 '12 at 21:25

1 Answer 1

The NIntegrates should be combined into one call:

NIntegrate[\[Rho][ y, \[Omega]]*(c/Hubble[z, \[Omega]])^3, {y, a, \[Infinity]}, {z, a, y}]

Otherwise, the inner integral remains in symbolic form when the outer integral is run.

share|improve this answer
    
Hiya, thanks for that. I tried that as well and I still get an inumr error. Is that I've tried reversing the order of integration as well in desperation, but to no avail. –  Gokotai Dec 10 '12 at 21:28
    
Make sure that both your rho function and Hubble function are defined in the following way: functionname[x_?NumericQ] := function goes here –  Guillochon Dec 10 '12 at 22:33
    
Hiya, all my numbers have been defined in a previous cell, and I have a seperate cell that specifies my loops and/or iterators as part of the ParallelTable command. –  Gokotai Dec 10 '12 at 22:48
    
Add ?NumericQ after each of the arguments in the declaration of Hubble and rho, as I described in my previous comment. –  Guillochon Dec 11 '12 at 0:00
    
Hi Guillochon, I tried that too but now it gives me a different error - slwcon. I increased the working precision but it still does this. Any advice on how to circumvent this? Thanks for the tips by the way! –  Gokotai Dec 11 '12 at 1:41

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.