ode45 Two Variable Differential equation Problem - Too many inputs error

1 visualización (últimos 30 días)
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

Respuesta aceptada

Stephan
Stephan el 23 de Nov. de 2020
Editada: Stephan el 23 de Nov. de 2020
Fixed the input in your functin. Rising t>7 gives warning, since the problem appears to be stiff:
%% 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 = 7;
%% Integrate
[t, state] = ode15s(@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
  1 comentario
Timothy Morell
Timothy Morell el 23 de Nov. de 2020
Thank you. My code obviously has other errors but this at least gets the code running. Much appreciated.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Assembly en Help Center y File Exchange.

Productos

Community Treasure Hunt

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

Start Hunting!

Translated by