Ode45 I get wrong results.
1 次查看(过去 30 天)
显示 更早的评论
function dydt = idn (t, y)
dydt = zeros(2,1);
dydt(1)=y(2);
dydt(2)=-((9.81*sin(y(1)))/0.5);
dydt = [0.78 0];
[t1,y1] = ode45(@idn, [0 20], dydt);
plot(t1,y1(:,2));
grid on;
This is a code for simple pendulum. When I use this code group, acceleration comes out wrong(it goes between max 3.. when it should be 13.). What am I doing wrong? When I use sind and put 45 degrees instead of sin and 0.78 radia, this time I get 30 ish something as a max result when it shouldn't change.
Original Eqn: Theta''=-g*sin(Theta)/ l![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/199970/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/199970/image.png)
2 个评论
采纳的回答
Stephan
2019-1-1
编辑:Stephan
2019-1-1
Hi,
ode45 integrates your second order ode two times. So the result of ode45 will be angle and velocity over time. To get acceleration you have to calculate it seperatly:
% initial conditions of angle and velocity
dydt = [pi/2; 0];
% integrat ode to get angle an velocity
[t1,y1] = ode45(@idn, [0 20], dydt);
% calculate acceleration
y1(:,3) = -9.81.*sin(y1(:,1))./0.5;
% plot results
plot(t1,y1(:,1),t1,y1(:,2),t1,y1(:,3));
grid on;
function dydt = idn(t, y)
dydt = zeros(2,1);
dydt(1)=y(2);
dydt(2)=-((9.81*sin(y(1)))/0.5);
end
Best regards
Stephan
更多回答(0 个)
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!