Search All of the Math Forum:
Views expressed in these public forums are not endorsed by
NCTM or The Math Forum.



Re: Using NIntegrate in a function
Posted:
Mar 8, 2013 6:21 AM


Dear all, I am struggling with the following problem, I will explain the problem to you with this simple toy example: I define a function f of a variable a through a numerical integration
f[a_] := NIntegrate[Exp[((a  1/3)^2 + 1)*x^4], {x, 1, 1}]
I want to find numerically the maximum of f with respect to a. If I use FindMaximum,
FindMaximum[{f[y], 1 <= y <= 1}, {y, 1/2}]
Then I have some error messages:
NIntegrate::inumr: The integrand E^(x^4 (1((1/3)+y)^2)) has evaluated to nonnumerical values for all sampling points in the region with boundaries {{0,1}}. >>
NIntegrate::inumr: The integrand E^(x^4 (1((1/3)+y)^2)) has evaluated to nonnumerical values for all sampling points in the region with boundaries {{0,1}}. >>
NIntegrate::inumr: The integrand E^(x^4 (1((1/3)+y)^2)) has evaluated to nonnumerical values for all sampling points in the region with boundaries {{0,1}}. >>
General::stop: Further output of NIntegrate::inumr will be suppressed during this calculation. >>
Still, in the end I have got the correct result {1.68968, {y > 0.333333}}. NMaximize gives the same error messages.
I have a more complicated example where I have a numerical routine (NDSolve) that needs some parameter q as an input and that is incorporated into a function g[q], just like in the toy example the numerical routine NIntegrate needs the parameter a, and NIntegrate is incorporated into the function f[a]. In this more complicated example, I have got the same kind of complaints, NDSolve::ndnl: "Endpoint q in {x,q,qp} is not a real number.", but in the end when I call NMaximize of FindMaximum to maximize g with respect to q, it crashes and I have got no useful output. Still, the function g[q] is welldefined, and when I call it for any numerical value of q I obtain a number and everything is fine.
Do you have any ideas on how to fix this?
Thanks! Best Michele
Hi, Michele
I checked your operators and they worked for me (PC WinXP, Math 9.0.1.0):
f[a_] := NIntegrate[Exp[((a  1/3)^2 + 1)*x^4], {x, 1, 1}] FindMaximum[{f[y], 1 <= y <= 1}, {y, 1/2}]
{1.68968, {y > 0.333333}}
Without error messages. However, you might try also this:
lst = Table[f[a], {a, 1, 1, 0.01}]; Max[lst]
1.68967
Have fun, Alexei
Alexei BOULBITCH, Dr., habil. IEE S.A. ZAE Weiergewan, 11, rue Edmond Reuter, L5326 Contern, LUXEMBOURG
Office phone : +35224542566 Office fax: +35224543566 mobile phone: +49 151 52 40 66 44
email: alexei.boulbitch@iee.lu



