Re: Integration with non-numeric parameters

*To*: mathgroup at smc.vnet.net*Subject*: [mg79793] Re: Integration with non-numeric parameters*From*: Peter Pein <petsie at dordos.net>*Date*: Sat, 4 Aug 2007 06:01:04 -0400 (EDT)*References*: <f8v1cb$ded$1@smc.vnet.net>

ingramfinance at gmail.com schrieb: > When I use Mathematica to solve the following > y=x1/(2*sigma^2*t) > > Integrate[y, {t, .5, 1}] > > I get the following answer: > > (0.34657*x1/sigma^2) > > OK, so far, so good. It appears that I can generate an answer with a > non-numeric parameter. Note that I am looking for an answer in terms > of x1. > > But when I try > > q=Exp[-(x1-t)^2/2*sigma^2*t] > > Integrate[q, {t, .5,1}] > > Now Mathematica does not solve this integral, it just repeats the > command > > > > I am trying to get an expression in terms of x1. Why do I get a > statement like this instead of an answer? There is something about > the functional form of the integrand that is causing the problem, I > just don't know what it is. > > > Any help you can give me is much appreciated! > > Hi, I did not get a value for your integral, but I want to give an advice: If you use the exact function Integrate[], do not use inexact numbers as boundaries! Or use NIntegrate. I want to demonstrate this with a function, which is in an optical way similar to yours (I moved one factor t out of the exponential function): In[1]:= q = t*Exp[(-(x1 - t)^2/2)*sigma^2]; In[2]:= Timing[FullSimplify[Integrate[q, {t, 1/2, 1}, Assumptions -> sigma >= 0]]] Out[2]= {11.024688*Second, ((2*(E^((3*sigma^2)/8) - E^((sigma^2*x1)/2)))/ E^((1/2)*sigma^2*(1 + (-1 + x1)*x1)) - Sqrt[2*Pi]*sigma*x1* (Erf[(sigma*(1 - 2*x1))/(2*Sqrt[2])] + Erf[(sigma*(-1 + x1))/Sqrt[2]]))/(2*sigma^2)} Now let's try the same with .5 instead of 1/2 and constrained to 10 times the time, Integrate has used for exact numbers: In[3]:= TimeConstrained[ Integrate[q,{t,.5,1},Assumptions\[Rule]sigma\[GreaterEqual]0]//FullSimplify// Timing,10*%[[1]]/Second,$Failed] Out[3]= $Failed Back to _your_ q: But you are using inexat numbers, therefore I will assume, you're interested in floats (Reals) as result. Use NIntegrate[]. NIntegrate needs all constants in its integrand to be specific numeric values. So the definition theIntegral[x1_?NumericQ, sigma_?NumericQ] := NIntegrate[Exp[-t*(x1 - t)^2/2*sigma^2], {t, 1/2, 1}] gives you a function which can be used for other functions (like FindMaximum, NIntegrate, NLimit[], Plot3D[], etc.) e.g.: Plot3D[theIntegral[x, s], {x, 0, 2}, {s, 0, 1}, PlotRange -> All] Peter