[Mathematica] NIntegrate Piecewise function with DE solution

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 ·
Replies
13
Views
3K
  • · Replies 1 ·
Replies
1
Views
3K
  • · Replies 1 ·
Replies
1
Views
3K
  • · Replies 6 ·
Replies
6
Views
2K
  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 2 ·
Replies
2
Views
5K
  • · Replies 1 ·
Replies
1
Views
5K
  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 4 ·
Replies
4
Views
5K
  • · Replies 4 ·
Replies
4
Views
3K