j'ai cette 2ème ordre ODE à résoudre dans Matlab:Résolution 2ème ordre ODE, Matlab- l'accélération de l'équation a besoin de sa propre valeur afin d'inclure un autre terme différent
(a + f(t))·(dx/dt)·(d²x/dt²) + g(t) + ((h(t) + i(t)·(d²x/dt² > b·(c-x)))·(dx/dt) + j(t))·(dx/dt)² + k(t)·(t > d) = 0
où
a
,b
,c
,d
sont connues constantesf(t)
,g(t)
,h(t)
,i(t)
,j(t)
,k(t)
sont connus des fonctions dépendantes de lat
x
est la positiondx/dt
est la vitessed²x/dt²
est l'accélération
et noter les deux conditions que
i(t)
est introduit dans l'équation si(d²x/dt² > b·(c-x))
k(t)
est introduit dans l'équation si(t > d)
Ainsi, le problème pourrait être résolu avec une structure similaire à Matlab comme cet exemple:
[T,Y] = ode45(@(t,y) [y(2); 'the expression of the acceleration'], tspan, [x0 v0]);
où
T
est le vecteur temporel,Y
est le vecteur de position (colonne 1 asy(1)
) et la vitesse (colonne 2 commey(2)
).ode45
est le solveur ODE, mais un autre pourrait être utilisé.tspan
,x0
,v0
sont connus.the expression of the acceleration
signifie une expression pourd²x/dt²
, mais vient ici le problème, car il est dans la condition pouri(t)
et « en dehors » en même temps la multiplication(a + f(t))·(dx/dt)
. Ainsi, l'accélération ne peut pas être écrit en Matlab commed²x/dt² = something
Quelques questions qui pourraient aider:
une fois l'état
(d²x/dt² > b·(c-x))
et/ou(t > d)
est satisfaite, le terme respectifi(t)
et/ouk(t)
sera être introduit jusqu'à la fin de l'heure déterminée autspan
.pour la condition
(d²x/dt² > b·(c-x))
, le termed²x/dt²
pourrait être écrit comme la différence des vitesses, commey(2) - y(2)'
, siy(2)'
est la vitesse de l'instant précédent, divisé par le temps de l'étape définie danstspan
. Mais je ne sais pas comment accéder à la valeur précédente de la vitesse pendant la résolution du ODE
Merci à l'avance!
Vous pouvez essayer un solveur implicite, comme [ 'ode15i'] (https://uk.mathworks.com/help/matlab/ref/ode15i.html) – Steve
@ Steve: Et qu'est-ce que cela va résoudre? – Wrzlprmft
@Wrzlprmft Cela résout le fait qu'il s'agit d'un ODE implicite, où 'x_tt: = d^2x/dt^2' est * effectivement * un argument implicite comme' H (x_tt - b (c * x)) 'où' H (t) 'est la fonction d'escalier Heaviside' H (t) = 1 si t> = 0, 0 si t <0'. Si la solution existe ou a un sens est une autre question à regarder. – Steve