How do I solve a differential equation that has an input derivative using ode45?
12 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
I have a simple equation I'd like to solve: Fdot = udot - b0*(F - u), where u is a time varying input, F is the variable I'm solving for, and b0 is a scalar constant. However, because there is a derivative of the input involved, I'm not sure how to handle it in ode45. Here's the code I'm using now:
%%Initialize Variables
tpoints = [0 1];
dt = 0.001;
tvec = tpoints(1):dt:tpoints(2);
dtvec = circshift(tvec,[0 -1]);
dtvec = dtvec(1:(size(tvec,2)-1));
initF = 0;
beta0 = 100;
u = ones(1,size(tvec,2));
u(101:200) = 2;
u(201:300) = 1;
%%Run continuous model
[T2,f] = ode45(@(t,y) contForce2(t,y,beta0,u,tvec,dtvec), tpoints, initF);
%%Plot Results
figure;
plot(T2,f,'r');
where the function in question is defined by
function dy = contForce2(t,y,beta0,u_in,tvec,dtvec)
dy = 0;
u = interp1(tvec,u_in,t);
dudt_vec = diff(u_in)./diff(tvec);
if t < dtvec(1)
dudt = dudt_vec(1);
% disp(t)
else
dudt = interp1(dtvec,dudt_vec,t);
end
dy = dudt - beta0*(y - u);
end
In the code above, I handled the input derivative by approximating it at each time step. However, this results in huge jumps in the solution corresponding to jump discontinuities in the input function. I know that these can't actually exist since the system has a smooth exponential solution for any setpoint (this is easily seen from the error dynamics, which can be rewritten as xdot = -b0*x, where error x = F - u, and have a solution of x = exp(-b0*t)).
I would really appreciate any help in dealing with these input derivatives to get plausible solutions for the differential equation.
0 commentaires
Réponse acceptée
Jan
le 17 Juin 2013
See http://www.mathworks.com/matlabcentral/answers/59582#answer_72047: A linear interpolation is not smooth, such that the step size control of the integrator must fail. Here u has a very hard jump in the 201.th frame. So the only feasible solution is to integrate until the jump, stop the integration and use the final values as new initial values for the next integration.
1 commentaire
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Ordinary Differential Equations dans Help Center et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!