Find zeros for the solution of an ode45 multiple variables set of second order equations

1 visualización (últimos 30 días)
I have this function and I would like to calculate when it's height hits zero (or close enough) for further calculations, but I can't manage to select its variables, since by using ode45 I also selected the derivatives as being variables (this or any other mistake)
how should I find it's crossing point with z == 0?
here is my function:
t_interval = [0,1];
[t,y] = ode45(@afst, t_interval, b_waarden);
function dxy = afst(t,Y)
%parameters
rho = 1.239;
g = 9.81;
Cw = 0.5
A = pi * (0.02)^2
m = 0.025
dxy = [Y(2);
-(1/m) * (rho*A*Cw*0.5) * sqrt((Y(2))^2 + (Y(4))^2) * (Y(6)));
Y(4);
-(1/m) * (rho*A*Cw*0.5) * sqrt((Y(2))^2 + (Y(4))^2 + (Y(6))^2) * (Y(2));
Y(6);
-(1/m) * (rho*A*Cw*0.5) * sqrt((Y(2))^2 + (Y(4))^2 + (Y(6))^2) * Y(4) - g];
end
and this is what I tried to find it's zero, but it never works:
nul = fsolve((y(:,5) == 0),(0; 0; 0))
or
nul = fsolve((y == (:, :, :, :, 0, :), (0; 0; 0; 0; 0; 0)))
please help me

Respuesta aceptada

Ameer Hamza
Ameer Hamza el 15 de Oct. de 2020
Editada: Ameer Hamza el 15 de Oct. de 2020
No, this is not the correct approach to do this in MATLAB. fsolve() only works with functions handle, while you have a numeric vector. Following shows one approach to find the element closest to 0
y5 = y(:,5); % get values from 5th column
[~, min_idx] = min(abs(y5));
min_val = y5(min_idx); % value nearest zero.
min_t = t(min_idx); % time at which the min_val occured

Más respuestas (0)

Categorías

Más información sobre Ordinary Differential Equations en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by