How to use max function for second order ODE
이전 댓글 표시
I have a second order ODE y'' + 0.5y + 2y = cos(5t^2 ) , y(0) = y'(0) = 0 that I have graphed and computed using ODE45.
tspan= [0 20];
xinit=[0 0];
[t,x] = ode45(@f,tspan,xinit);
max_val= max(t,x);
plot(t,x);
savefig('oscillator.fig')
My function for f is
function dxdt=f(t,x)
dxdt=[x(2);cos(5*t^(2))-0.5*x(1)+2*x(2)];
end
However, the max_val return 0,0 which is not mathematically reasonable The code complies and the graph looks exponential in nature. What am I doing wrong?
답변 (1개)
Walter Roberson
2019년 11월 10일
0 개 추천
Your t will be a column vector. Your x will be a 2D array with the same number of rows that t has, and with 2 columns.
max(column vector, 2d array) is (R2016b onwards) treated the same as max(repmat(column vector, 1, number of columns in 2d array), 2d array) -- that is, the column vector would be replicated until it was a 2D array the same size as the second input.
Once that was done, the meaning of max(2d array, another 2d array) is that the maximum of each corresponding position is taken.
So what you are doing is comparing each element of the x array to the time that the entry was generated at, and taking the maximum between those (time vs ode value)
If you want to know the maximum of each x entry, then max(x) not max(t,x)
카테고리
도움말 센터 및 File Exchange에서 Ordinary Differential Equations에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!