ode45 Two Variable Differential equation Problem - Too many inputs error
Show older comments
I need help with solving this. I am not too savvy with Matlab and was hoping I could get some help on here. Thanks in advance!
%% Initial Conditions:
% Initial Quaternion Elements (t=0):
q0 = [0.57 0.57 0.57]'
q40 = 0.159
% Initial Body Rate:
w0 = [0.1 0.1 0.1]' % rad/s
% Inital State:
state0 = [q0;w0]
% Final time (sec)
tf = 50;
%% Integrate
[t, state] = ode45(@KEQuaternion, [0 tf], state0);
%% Plot
%plot(t, state*180/pi); grid
%xlabel('Time(sec)');
%ylabel('Euler Angles (Deg)');
%hold on; plot(t, 90*ones(size(t)), 'r--');
%legend('\psi','\theta','\phi','singular angle for \theta')
function statedot = KEQuaternion(state)
%% Inputs:
% t :time(sec)
% state :states(rad), 3 by 1 vector
%% Outputs:
% statedot :Time derivate of states (rad/s), 3 by 1 vector
%% Define (or Redefine with current values):
q = [state(1); state(2); state(3)];
w = [state(4); state(5); state(6)];
%% Given:
% Quaternion Feedback Gain Matrices (4 cases):
% Case 1:
K1 = [201 0 0;
0 110 0;
0 0 78];
% 10% inaccurate:
mew = 0.9;
% Rate Gain Matrix:
D = 0.316*[1200 0 0;
0 2200 0;
0 0 3100];
% Asymmetric rigid spacecraft inertia matrix:
J = [1200 100 -200;
100 2200 300;
-200 300 3100];
% Skewed Symmetric Matrix:
OM = [0 -w(3) w(2);
w(3) 0 -w(1);
-w(2) w(1) 0];
u = mew*(-OM*J*w-D*w-K1*q)
q4 = -1/2*w'*q
%% Kinematic Equation for Quaternion
omegadot = OM*w+u;
qdot = 1/2*OM*q + 1/2*q4*w;
statedot = [omegadot;qdot]
end
Accepted Answer
More Answers (0)
Categories
Find more on Quaternion Math in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!