I need help with my MATLAB code. I wanted to numerically integrate the Modified Rodrigiues Parameters. But there is a singularity and the ode45 shows error. How do I use the event function to stop the integration when there is a singularity.   w0 = [0; 0; 0.3]; MRP0 = [0;        0;        -0.198912367379658]; t = 0:100; % Integrate the Euler equations using ode45 options = odeset('RelTol',1e-10,'AbsTol',1e-10); [t, y] = ode45(@KDE_MRP, t, [MRP0; w0], options); % Extract the Euler parameters and angular velocities MRP = y(:, 1:3);

Database System Concepts
7th Edition
ISBN:9780078022159
Author:Abraham Silberschatz Professor, Henry F. Korth, S. Sudarshan
Publisher:Abraham Silberschatz Professor, Henry F. Korth, S. Sudarshan
Chapter1: Introduction
Section: Chapter Questions
Problem 1PE
icon
Related questions
Question

I need help with my MATLAB code. I wanted to numerically integrate the Modified Rodrigiues Parameters. But there is a singularity and the ode45 shows error. How do I use the event function to stop the integration when there is a singularity.

 

w0 = [0; 0; 0.3];

MRP0 = [0;
       0;
       -0.198912367379658];
t = 0:100;

% Integrate the Euler equations using ode45
options = odeset('RelTol',1e-10,'AbsTol',1e-10);
[t, y] = ode45(@KDE_MRP, t, [MRP0; w0], options);

% Extract the Euler parameters and angular velocities
MRP = y(:, 1:3);
w = y(:, 4:6);

 

function dMRPwdt = KDE_MRP(t,MRPw)
    
    I = [0.3; 0.2; 0.4];
    L = [0;0;0];
    
    MRP = MRPw(1:3);
    w = MRPw(4:6);

    dMRPdt = zeros(3,1);
    dwdt = zeros(3,1);

    C11 = 1 - dot(MRP,MRP) + 2*MRP(1)^2;
    C12 = 2*(MRP(1)*MRP(2) - MRP(3));
    C13 = 2*(MRP(1)*MRP(3) + MRP(2));
    C21 = 2*(MRP(2)*MRP(1) + MRP(3));
    C22 = 1 - dot(MRP,MRP) + 2*MRP(2)^2;
    C23 = 2*(MRP(2)*MRP(3) - MRP(1));
    C31 = 2*(MRP(3)*MRP(1) - MRP(2));
    C32 = 2*(MRP(3)*MRP(2) + MRP(1));
    C33 = 1 - dot(MRP,MRP) + 2*MRP(3)^2;
    
    C = [C11 C12 C13;
         C21 C22 C23;
         C31 C32 C33];

    dMRPdt = 0.25 * C * w;
    
    dwdt(1) = (-(I(3) - I(2))*w(2)*w(3) + L(1)) / I(1);
    dwdt(2) = (-(I(1) - I(3))*w(3)*w(1) + L(2)) / I(2);
    dwdt(3) = (-(I(2) - I(1))*w(1)*w(2) + L(3)) / I(3);


    % Combine the time derivatives into a single vector
    dMRPwdt = [dMRPdt; dwdt];
end

Expert Solution
trending now

Trending now

This is a popular solution!

steps

Step by step

Solved in 4 steps

Blurred answer
Knowledge Booster
Fundamentals of Boolean Algebra and Digital Logics
Learn more about
Need a deep-dive on the concept behind this application? Look no further. Learn more about this topic, computer-science and related others by exploring similar questions and additional content below.
Similar questions
Recommended textbooks for you
Database System Concepts
Database System Concepts
Computer Science
ISBN:
9780078022159
Author:
Abraham Silberschatz Professor, Henry F. Korth, S. Sudarshan
Publisher:
McGraw-Hill Education
Starting Out with Python (4th Edition)
Starting Out with Python (4th Edition)
Computer Science
ISBN:
9780134444321
Author:
Tony Gaddis
Publisher:
PEARSON
Digital Fundamentals (11th Edition)
Digital Fundamentals (11th Edition)
Computer Science
ISBN:
9780132737968
Author:
Thomas L. Floyd
Publisher:
PEARSON
C How to Program (8th Edition)
C How to Program (8th Edition)
Computer Science
ISBN:
9780133976892
Author:
Paul J. Deitel, Harvey Deitel
Publisher:
PEARSON
Database Systems: Design, Implementation, & Manag…
Database Systems: Design, Implementation, & Manag…
Computer Science
ISBN:
9781337627900
Author:
Carlos Coronel, Steven Morris
Publisher:
Cengage Learning
Programmable Logic Controllers
Programmable Logic Controllers
Computer Science
ISBN:
9780073373843
Author:
Frank D. Petruzella
Publisher:
McGraw-Hill Education