I'm a little new at Mathematica and I'm trying to solve the following ordinary differential equation:

$\qquad x\frac{dy(x)}{dx}+y=-p(x)$.

I have data (in a list) for $x$, and the corresponding values of $p(x)$ (also in a list). I need to solve the ODE to get a list $y(x)$ for the $x$s in the 1st list. I've been trying to use NDSolve, like so:

NDSolve[x*y'[x] + y[x] == -p, y, {x, a, b}]

with no luck.

Is this possible in Mathematica? Is there a way to do this?

  • $\begingroup$ In other words are you trying to fit the differential equation to your data ? $\endgroup$ – Lotus Sep 5 '18 at 3:33
  • $\begingroup$ @Lotus yes I guess so! $\endgroup$ – zack Sep 5 '18 at 3:40
  • $\begingroup$ Then here is what you do: Create a cost function with your differential equation (NDSolve etc..) and the Norm between the solution and your data. Use NMinimize to minimize the cost function to get y(x) which should be a good fit $\endgroup$ – Lotus Sep 5 '18 at 3:42
  • $\begingroup$ @Lotus This is a misunderstanding. If I am not mistaken, OP has just some discrete data instead a function for the excitations p (the right hand side) and wants to simply solve the ODE for y. $\endgroup$ – Henrik Schumacher Sep 5 '18 at 6:20

Why not try to fit p(x) to the data and then using DSolve? Since you did not make a MWE, I made up some data

ClearAll[x, y, p]
xData = {1, 2, 3, 4};
pData = {1, 4, 9, 16};
data = Transpose[{xData, pData}];
p[x_] = Fit[data, {1, x, x^2}, x]; (*change fit as needed*)
DSolve[x y'[x] + y[x] == -p[x], y[x], x]

Mathematica graphics

| improve this answer | |
  • 2
    $\begingroup$ Should the data be free of noise, using Interpolation instead of Fit also comes to mind. $\endgroup$ – Henrik Schumacher Sep 5 '18 at 5:30

It is a very simple equation and I recommend to first solve it analytically. It can be done by the, say, the so-called, u*v method. The solution is as follows:

enter image description here

Now one can directly integrate it numerically by summing up the areas of the trapezoids formed by the points x1,x2,p1 and p2. Alternatively, one can use the advice of @Nasser and integrate the fitted function, which is easier.

Have fun!

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.