# Solving set of coupled non-linear ode using ode45

조회 수: 10(최근 30일)
Ajai Singh 2022년 1월 3일
편집: Ajai Singh 2022년 1월 4일
Hello everyone,
I am tryingt to solve a set of coupled non-linear differential equation using ode45 but i am not getting the desired results. By desired results I mean , setting all the initial conditions to be zero and setting torques for both joints , there should be no change in coordinate or change in velocity of the manipulator in other words if you plot the solution of the ode . It should be a horizontal line parallel to time axis. But this is not the case when i run the code. Given below are the set of equations that i am trying to solve numerically: And this is the code that i am using to solve the above system :
function xdot = DynOde(t,y)
%% init constants;
m1 = 5;
m2 = 2;
a1 = 0.34;
a2 = 0.34;
g = 9.81;
T1 = 0;
T2 = 0;
x1dot = y(2);
x1ddot = (T1*a2 - 2*a2 - 2*a1*cos(y(3)) - a1*a2*g*m1*cos(y(1)) - a1*a2*g*m2*cos(y(1)) + a1*a2^2*m2*sin(y(3))*y(2)^2 + a1*a2^2*m2*sin(y(3))*y(4)^2 + a1*a2*g*m2*cos(y(3))*cos(y(1) + y(3)) + a1^2*a2*m2*cos(y(3))*sin(y(3))*y(2)^2 + 2*a1*a2^2*m2*sin(y(3))*y(2)*y(4))/(a2*(a1^2*m1 + a1^2*m2 - a1^2*m2*cos(y(3))^2));
x2dot = y(4) ;
x2ddot = (T1*a2 - 2*a2 - 2*a1*cos(y(3)) - a1*a2*g*m1*cos(y(1)) - a1*a2*g*m2*cos(y(1)) + a1*a2^2*m2*sin(y(3))*y(2)^2 + a1*a2^2*m2*sin(y(3))*y(4)^2 + a1*a2*g*m2*cos(y(3))*cos(y(1) + y(3)) + a1^2*a2*m2*cos(y(3))*sin(y(3))*y(2)^2 + 2*a1*a2^2*m2*sin(y(3))*y(2)*y(4))/(a2*(a1^2*m1 + a1^2*m2 - a1^2*m2*cos(y(3))^2));
xdot = [x1dot;x1ddot;x2dot;x2ddot];
end
Any advice would be of great help.
Than you.
##### 댓글 수: 2표시 이전 댓글 수: 1숨기기 이전 댓글 수: 1
Ajai Singh 2022년 1월 3일
To check if the code is working , give [ 0 0 0 0 ] . And if everything thing is fine then the plot of solution of the ode should be horizontal lines parallel to time axis.

댓글을 달려면 로그인하십시오.

### 채택된 답변

David Goodmanson 2022년 1월 3일
Hi Ajai,
The angles appear to be measured from the horizontal, not the vertical. That's because the terms involving g use cos(theta) and not sin(theta). So if you put in theta = 0 for the initial conditions, the bars are horizontal. So of course they move due to the torque provided by gravity.
##### 댓글 수: 5표시 이전 댓글 수: 4숨기기 이전 댓글 수: 4
Ajai Singh 2022년 1월 4일
편집: Ajai Singh 2022년 1월 4일
Thank you so much for the explanation. I get it now.Just to confirm, all that I need to do is : instead of having constant torque, make it a function of time ?

댓글을 달려면 로그인하십시오.

### 범주

Find more on Programming in Help Center and File Exchange

R2021a

### Community Treasure Hunt

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

Start Hunting!