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.

First of all, I am fairly new to Mathematica and Stackoverflow, so please feel free to give me any advice whatsoever.

I aim to calculate an integral of an expression that has been determined numerically. I will give a simple example: A solution (dependent on some parameter value a) is derived by

Clear[Sol]
Sol[a_] := FindInstance[x^2 == a, x]

and results are fine:

Sol[4]

gives

{{x -> 2}}.

Obviously, this special example could be solved algebraically, but since the set of equalities and inequalities I want to analyse is much more complicated, FindInstance (and therefore numerical evaluation) is the only option I could think of (the results from Reduce are to complicated to be checked by hand and I don't know how to elegantly get results from Reduce in an automated way; if you have recommendations on how to approach the results from Reduce, please let me know).

I now aim to calculate the integral of the solution given above and try

In[3]:= NIntegrate[(x /. Sol[a][[1]]), {a, 1, 4}]

During evaluation of In[3]:= FindInstance::exvar: The system contains a nonconstant expression a independent of variables {x}.

During evaluation of In[3]:= ReplaceAll::reps: {x^2==a} is neither a list of replacement rules nor a valid dispatch table, and so cannot be used for replacing.

During evaluation of In[3]:= NIntegrate::inumr: The integrand x/.x^2==a has evaluated to non-numerical values for all sampling points in the region with boundaries {{1,4}}.

Out[3]= NIntegrate[x /.Sol[a][[1]], {a, 1, 4}]

To mee, it seems like NIntegrate does not "take a value of a and plug it into Sol, calculate Sol[a] and proceed to the next value of a". Therefore I tried to force Mathematica to evaluate Sol with numerical values for a using commands like Evaluate, With, Block, Module but was unsuccesful (which might be due to poor understanding of these commands).

Thanks for reading and maybe helping me out!

share|improve this question
add comment

migrated from stackoverflow.com Feb 1 '13 at 14:24

This question came from our site for professional and enthusiast programmers.

1 Answer

up vote 3 down vote accepted

In general you can define

Sol[a_?NumericQ] := FindInstance[x^2 == a, x][[1, 1, 2]]

Then

Sol[4]
(* 4 *)

NIntegrate[Sol[a], {a, 1, 4}]
(* 4.66667 *)
share|improve this answer
    
Works like a charm, thanks! –  Mitch D Feb 1 '13 at 23:37
add comment

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.