Solving a partial differential equation with ode15s,we know that this ode solver integrates the ode over time direvatives.I need to find the values of these time direvatives,do you have any special command? for example: for i=1:n dudt=uxx(i) end
how can I find these dudt at each time and x(i)? thanks alot

 Akzeptierte Antwort

Andrew Newell
Andrew Newell am 30 Jan. 2012

0 Stimmen

If you are solving something like
[t,x] = solver(odefun,tspan,y0)
and you want the time derivative at each point t(i), then that is simply
dxdt = 0*x; % initialize the array
for ii=1:length(t)
dxdt(ii,:) = odefun(t(ii),x(ii,:));
end
(edited to allow for the possibility that x has more than one component at each time t).

2 Kommentare

Bård Skaflestad
Bård Skaflestad am 30 Jan. 2012
That's more or less what I had in mind. Calling the |odefun| from an |OutputFcn| is just another refinement.
ahmad
ahmad am 20 Feb. 2012
So if I want to calculate the integral of square of dudt i don't have any special command in my mind,in fact I used trapz but it keeps saying "the length of x should be the same as the first non-singleton variable" or it says that "x should be a vector".

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (2)

Bård Skaflestad
Bård Skaflestad am 30 Jan. 2012

0 Stimmen

If you're going to solve a PDE by the method of lines (i.e., converting it into a system of ODEs), then you will need to provide a spatial discretisation of the PDE along with suitable initial conditions whence ode15s (or others) will likely assist you in the numerical solution.
Please review your favourite text book on discretisation methods.

4 Kommentare

ahmad
ahmad am 30 Jan. 2012
Actually I am solving a PDE by discretization,i did all that and got the matrix of solution which is like u(x,t).but at some other part of my research I need to double integrate over values of dudt,so I need them.I know that ode15s calculates these values and save them probably somewhere,I need to find them and then use them as my integrand.
I hope you understood my problem.
thanks
Bård Skaflestad
Bård Skaflestad am 30 Jan. 2012
I'd be *very* surprised if the solver stores all function values throughout the computation. That is an extraordinary amount of data, especially if the spatial resolution is high or if you're solving a multi-dimensional PDE.
However, I'm thoroughly confused about what you're asking. Isn't |dudt| exactly the output of your |odefun|? Can you not calculate these values yourself by simply calling your |odefun| directly at a point (t,u)? This process may even be directed by the |OutputFcn| facility detailed in the |optimset| documentation.
Bård Skaflestad
Bård Skaflestad am 30 Jan. 2012
Sorry, I meant |odeset|, not |optimset|.
ahmad
ahmad am 30 Jan. 2012
I think that you are good at matlab numerical processes,can you please take a look at my program?I need to call the du/dt values solved by ode solver at every point like du/dt(t,x),is there a special command for it?it is true that its a big amount of data.so how can i do the other calculations using these values?
thanks

Melden Sie sich an, um zu kommentieren.

Andrew Newell
Andrew Newell am 30 Jan. 2012

0 Stimmen

You could use deval.
EDIT: Here is a modified version of the example at the link provided:
sol = ode45(@vdp1,[0 20],[2 0]);
t = linspace(0,20,100);
[y,dy] = deval(sol,t,1);
plot(t,dy);

3 Kommentare

Bård Skaflestad
Bård Skaflestad am 30 Jan. 2012
Possibly, but I don't think that's what the OP actually wants. If I understand correctly, he wants to calculate the (temporal) derivative of the solution which |deval| does not do -- or at least not return to the caller. I think he should just call his original |odefun| from an |OutputFcn| and then do something sensible with the result.
I could be mistaken, though, and I'd be happy to stand corrected.
Andrew Newell
Andrew Newell am 30 Jan. 2012
I think it is the time derivative (as in the example I added), but for a polynomial fitting the solution. I provide a more direct solution in a separate answer.
Bård Skaflestad
Bård Skaflestad am 30 Jan. 2012
Indeed it is. The second output of |deval| is the derivative (wrt the independent variable) of the continuous output polynomial fitted to the numerical scheme of the particular solver (ODE45 in the above example).
Yet another detail I'd missed while skimming the documentation of |deval|.

Melden Sie sich an, um zu kommentieren.

Produkte

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by