I having problems with MATLAB ode45 solver. For the following code, Matlab is giving me index errors. All I am trying to do is integrate the differential equations in a ode45 function. But I don't see what the problem here is. Can you help me fix this code. % Initial Conditions w = [2;-1;1]; T = 30; I = [150; 400; 400]; EP = [0;0;0;1]; C = eye(3,3); tspan = 0:20; % Using ode45 to integrate w dot options = odeset('RelTol',1e-10,'AbsTol',1e-10); result = ode45(@K_DDE, tspan, [w';C], options); % Extracting information from ode solver t = result.x; w_ode = result.y(1,:); C_ode = result.y(2:4,:) function dwCdt = K_DDE(~,w_C) w = w_C(1,:); C = w_C(2:4,:); % Kinematic Differentia Equations for DCM dCdt = eye(3,3); dCdt(1,1) = C(1,2)*w(3) - C(1,3)*w(2); dCdt(1,2) = C(1,3)*w(1) - C(1,1)*w(3); dCdt(1,3) = C(1,1)*w(2) - C(1,2)*w(1); dCdt(2,1) = C(2,2)*w(3) - C(2,3)*w(2); dCdt(2,2) = C(2,3)*w(1) - C(2,1)*w(2); dCdt(2,3) = C(2,1)*w(2) - C(2,2)*w(1); dCdt(3,1) = C(3,2)*w(3) - C(3,3)*w(2); dCdt(3,2) = C(3,3)*w(1) - C(3,1)*w(3); dCdt(3,3) = C(3,1)*w(2) - C(3,2)*w(1); dwCdt = [w'; dCdt]; end
I having problems with MATLAB ode45 solver. For the following code, Matlab is giving me index errors. All I am trying to do is integrate the differential equations in a ode45 function. But I don't see what the problem here is. Can you help me fix this code.
% Initial Conditions
w = [2;-1;1];
T = 30;
I = [150; 400; 400];
EP = [0;0;0;1];
C = eye(3,3);
tspan = 0:20;
% Using ode45 to integrate w dot
options = odeset('RelTol',1e-10,'AbsTol',1e-10);
result = ode45(@K_DDE, tspan, [w';C], options);
% Extracting information from ode solver
t = result.x;
w_ode = result.y(1,:);
C_ode = result.y(2:4,:)
function dwCdt = K_DDE(~,w_C)
w = w_C(1,:);
C = w_C(2:4,:);
% Kinematic Differentia Equations for DCM
dCdt = eye(3,3);
dCdt(1,1) = C(1,2)*w(3) - C(1,3)*w(2);
dCdt(1,2) = C(1,3)*w(1) - C(1,1)*w(3);
dCdt(1,3) = C(1,1)*w(2) - C(1,2)*w(1);
dCdt(2,1) = C(2,2)*w(3) - C(2,3)*w(2);
dCdt(2,2) = C(2,3)*w(1) - C(2,1)*w(2);
dCdt(2,3) = C(2,1)*w(2) - C(2,2)*w(1);
dCdt(3,1) = C(3,2)*w(3) - C(3,3)*w(2);
dCdt(3,2) = C(3,3)*w(1) - C(3,1)*w(3);
dCdt(3,3) = C(3,1)*w(2) - C(3,2)*w(1);
dwCdt = [w'; dCdt];
end
Trending now
This is a popular solution!
Step by step
Solved in 3 steps with 3 images