Mathematica [Mathematica] NIntegrate Piecewise function with DE solution

AI Thread Summary
The discussion centers on solving a differential equation (DE) and using its solution within a piecewise function for numerical integration. The user initially encounters an issue with the NIntegrate function, which fails to compute due to the output of NDSolve being a list. The solution involves modifying the function definition to extract the first element from the list produced by NDSolve. After implementing this change, the user successfully integrates the piecewise function, yielding a result of 3.5. The key takeaway is the importance of correctly handling the output format of NDSolve when defining subsequent functions for integration.
jackmell
Messages
1,806
Reaction score
54
Hi,

I'd like to solve a DE, create a function with the solution, then use that solution in a Piecewise function, and then NIntegrate the Piecewise function but I can't get NIntegate to work. Here's what I'm trying to do:

Code:
mysol = NDSolve[{y'[x] == x, y[0] == 1}, y, {x, 0, 1}]
myy[x_] := Evaluate[y[x] /. mysol];

myf[x_] := Piecewise[{{myy[x], 0 < x <= 1}, {x^2, x > 1}}];

NIntegrate[myf[x], {x, 0, 2}]

NIntegrate then tells me it's not numeric in the interval.

Can someone explain to me what I'm doing wrong?

Thanks,
Jack
 
Physics news on Phys.org
The output of NDSolve (mysol) is a list. You need to take the first element of it in your myy function definition, as follows:

Code:
In[25]:= mysol = NDSolve[{y'[x] == x, y[0] == 1}, y, {x, 0, 1}]

In[26]:= myy[x_] := Evaluate[y[x] /. mysol][[1]];

In[27]:= myf[x_] := Piecewise[{{myy[x], 0 < x <= 1}, {x^2, x > 1}}];

In[28]:= NIntegrate[myf[x], {x, 0, 2}]

Out[28]= 3.5
 
phyzguy said:
The output of NDSolve (mysol) is a list. You need to take the first element of it in your myy function definition, as follows:

Code:
In[25]:= mysol = NDSolve[{y'[x] == x, y[0] == 1}, y, {x, 0, 1}]

In[26]:= myy[x_] := Evaluate[y[x] /. mysol][[1]];

In[27]:= myf[x_] := Piecewise[{{myy[x], 0 < x <= 1}, {x^2, x > 1}}];

In[28]:= NIntegrate[myf[x], {x, 0, 2}]

Out[28]= 3.5

Ok. Thanks a bunch. It's working now. :)
 

Similar threads

Replies
13
Views
2K
Replies
1
Views
2K
Replies
1
Views
2K
Replies
6
Views
2K
Replies
1
Views
2K
Replies
2
Views
5K
Replies
1
Views
5K
Replies
1
Views
2K
Replies
4
Views
3K
Back
Top