The Mathieu Equation—Stability for 2DOF whirlflutter system

4 Comments
Answers (1)
0 votes


5 Comments
- I like how you allocate empty arrays for the different regimes, and then you add a row to the appropriate array each time the eigenvalues turn out a certain way. Then, after all points in the regime of interest are analyzed, you use scatter to plot the different arrays. That is a nice way of doing it.
- I think you should have an array, initially empty, called "stable". If a point is not unstable and not divergent, then a row should be added to the "stable " array, with the cirrent K_psi and K_theta. The stable points should be plotted with a distinct symbol and color, on the final plot.
- What are the units for frequencies f_pitch and f_yaw? As I mentioned above, the Tech Note uses dimensionless time for the analysis. Do the ranges for f_pitch and f_yaw correspond to Kx*=0 to 15, and Ky*=0 to 15? If not, why not? After all, you are trying to reproduce Figure 9.
- Since there are 4 roots to a 4th order polynomial, it is possible that, for a single time t, and associated blade angle phi, some roots are unstable, and some roots are stable. But that does not make sense, because, at a given value of f_yaw and f_pitch and t, the system is either unstable or not. The system cannot be stable and unstable at the same time. But your analysis allows for such a non-sensical result. I think the solution to this is to do the stability analysis by looking at all the roots. If any root is unstable, then the system is unstable for that combination of parameters.
- I have not evaluated your 4th order polynomial to see if it correctly represents the characteristic equation for the system.
- Even if you fix the issue related to analyzing each root separately, there is still another similar issue: You analyze the system at 100 time values, for each comination of f_pitch and f_yaw. K_phi and K_theta do not depend on time. They only depend on f_pitch and f_yaw, at least according to your formulas. It is possible with your algorithm, that there will be 50 unstable points at a particular f_pitch and f_yaw, and 50 unstable points. Or some other combination of 100 total stable and unstable points, for the same f_pitch and f_yaw. But that does not make sense, because, for a given f_pitch and f_yaw, the system should be either stable or unstable, not both. Likewise, the algorithm could find flutter at 50 values of t, and not flutter at the other 50 values of t. That too does not make sense, for the same reason. I am not sure how to fix this. I think the problem indicates that your implementation of Floquet theory to this system is incorrect. I do not know what the correct approach is. As I said above, I have never learned or applied Floquet theory.
- I have not verified the correctness of your formulas for K_psi and K_theta, as functions of f_pitch and f_yaw.
- I have not verified the correctness of your criterion for identifying divergence from analysis of the K matrix.
- I haved not verified the correctness of your criterion for identifying instability from anaysis of the roots of the characteristic polynomial.
- You identify unstable points as being in the 1/Rev divergence region by analyzing the real parts of the roots of the 4th order polynomial. Let's assume r(k)=a+ib, where i=sqrt(-1). (I assume that the polynomial corresponds to the characteristic equation, but I have not verified that.) I recommend that you consider the imaginary part, b, rather than the the real part, a. For a standard linear differential equaiton, the solution has an oscillatory component iff one or more roots are complex. If time is in seconds, then the frequency of oscillation (in rad/s) equals b, the imaginary component of the root. Equation 147 in the Tech Note is a differential equation with repsect to dimensionless time (equal to blade rotation angle). Therefore the frequecies of the solutions will also be dimensionless, or relative to 2 pi radians of blade rotation. Therefore I recommend that you analyze the imaginary part, b, for unstable points. If b equals approximately 1 or 2 for any of the roots, then there is a component of the solution that is close in frequency to the whole propellor (b=1) or every-blade (b=2) rotation frequency, and this means the system is in the 1/Rev divergence region.
- You identify points as being in the Divergence region if the real part of the determinant of the K (stiffness) matrix is <0. This suprises me, because, for many linear systems, an eigenvalue with a positive real part indicates instability (a solution that grows exponentially with time). I admit that I do not understand how the determinant of the stiffness matrix relates to instability, so maybe your method is fine. But you might want to check this.
Hi @Nikko,
I made modifications to your code and experimenting with it. However, I am too tired now, please take a look at the code below to give you some clues to find solution to your problem, when you execute code, it will display “Index in position 2 exceeds array bounds”. However, pay close attention to plot. You have to change parameters in code to find flaw in your code and fix the problem. At the moment, I am too tired. Hope to hear good news.
% Define parameters
N = 2; % Number of blades
I_thetaoverI_b = 2; % Moment of inertia pitch axis over I_b
I_psioverI_b = 2; % Moment of inertia yaw axis over I_b
C_thetaoverI_b = 0.00; % Damping coefficient over I_b
C_psioverI_b = 0.00; % Damping coefficient over I_b
h = 0.3; % rotor mast height, wing tip spar to rotor hub [m]
hoverR = 0.34;
R = h / hoverR; % radius [m]
gamma = 4; % lock number
V_knots = 325; % the rotor forward velocity [knots]
% Convert velocity from [knots] to [meters per second]
% 1 knot = 0.51444 meters per second
V = V_knots * 0.51444;
% Calculate angular velocity in radians per second
omega_rad_s = V / R;
% Convert angular velocity from radians per second to RPM
% 1 radian per second = (60 / (2 * pi)) RPM
Omega = omega_rad_s * (60 / (2 * pi));
% Frequency ranges
f_pitch = 0.01:5:80;
f_yaw = 0.01:5:80;
% Time periods for pitch and yaw
T_pitch = 1 ./ (2 * pi * f_pitch);
T_yaw = 1 ./ (2 * pi * f_yaw);
divergence_map = [];
Rdivergence_map = [];
unstable = [];
% Define the value of H_u
H_u = 1; % Replace with the actual value
% Define the values of T_pitch and T_yaw
T_pitch = [1, 2, 3]; % Replace with the actual values
T_yaw = [4, 5, 6]; % Replace with the actual values
% Define the values of I_psioverI_b, I_thetaoverI_b,
C_thetaoverI_b, C_psioverI_b, M_b, M_u, gamma, h, and V
I_psioverI_b = 0.5; % Replace with the actual value I_thetaoverI_b = 0.7; % Replace with the actual value C_thetaoverI_b = 0.3; % Replace with the actual value C_psioverI_b = 0.2; % Replace with the actual value M_b = 0.9; % Replace with the actual value M_u = 0.8; % Replace with the actual value gamma = 0.6; % Replace with the actual value h = 0.1; % Replace with the actual value V = 0.5; % Replace with the actual value
% Initialize the matrices to store the results
unstable = [];
divergence_map = [];
Rdivergence_map = [];
% Modify the loop to iterate over time points
for i = 1:length(T_pitch)
for j = 1:length(T_yaw)
T = max(T_pitch(i), T_yaw(j)); % Use the maximum period to cover all dynamics
t_steps = linspace(0, T, 100); % Time steps within one period
for t = t_steps% Angular frequencies for the current time point
w_omega_pitch = 2 * pi / T_pitch(i);
w_omega_yaw = 2 * pi / T_yaw(j);
K_psi = (w_omega_pitch^2) * I_psioverI_b;
K_theta = (w_omega_yaw^2) * I_thetaoverI_b;
% Calculate matrices at time t using harmonic motion expressions
phi = pi * t / T; % Phase variation over the period
% Define inertia matrix [M]
M_matrix = [I_thetaoverI_b + 1 + cos(2*phi), -sin(2*phi);
-sin(2*phi), I_psioverI_b + 1 - cos(2*phi)];% Define damping matrix [D]
D11 = C_thetaoverI_b + h^2*gamma*H_u*(1 - cos(2*phi)) - gamma*M_b*(1 + cos(2*phi)) - (2 + 2*h*gamma*M_u)*sin(2*phi);
D12 = h^2*gamma*H_u*sin(2*phi) + gamma*M_b*sin(2*phi) - 2*(1 + cos(2*phi)) - 2*h*gamma*M_u*cos(2*phi);
D21 = h^2*gamma*H_u*sin(2*phi) + gamma*M_b*sin(2*phi) + 2*(1 - cos(2*phi)) - 2*h*gamma*M_u*cos(2*phi);
D22 = C_psioverI_b + h^2*gamma*H_u*(1 + cos(2*phi)) - gamma*M_b*(1 - cos(2*phi)) + (2 + 2*h*gamma*M_u)*sin(2*phi);
D_matrix = [D11, D12;
D21, D22];% Define stiffness matrix [K]
K11 = K_theta - h*gamma*V*H_u*(1 - cos(2*phi)) + gamma*V*M_u*sin(2*phi);
K12 = -h*V*gamma*H_u*sin(2*phi) + gamma*V*M_u*(1 + cos(2*phi));
K21 = -h*gamma*V*H_u*sin(2*phi) - gamma*V*M_u*(1 - cos(2*phi));
K22 = K_psi - h*gamma*V*H_u*(1 + cos(2*phi)) - gamma*V*M_u*sin(2*phi);
K_matrix = [K11, K12;
K21, K22];% Compute the system matrices
M11 = M_matrix(1, 1); M12 = M_matrix(1, 2); M21 = M_matrix(2, 1); M22 = M_matrix(2, 2);
D11 = D_matrix(1, 1); D12 = D_matrix(1, 2); D21 = D_matrix(2, 1); D22 = D_matrix(2, 2);
K11 = K_matrix(1, 1); K12 = K_matrix(1, 2); K21 = K_matrix(2, 1); K22 = K_matrix(2, 2);
% Find the roots of the polynomial equation
P0 = M11*M22 - M12*M21;
P1 = (- D11*M22*1j - D22*M11*1j + M12*D21*j + D12*M21*j);
P2 = (D11*D22*(1j)^2 - K22*M11 - K11*M22 - D12*D21*(1j)^2 + M12*K21 + M21*K12);
P3 = (D11*K22*1j - D12*K21*1j - D21*K12*1j + D22*K11*1j);
P4 = K11*K22 - K12*K21;
P = roots([P0, P1, P2, P3, P4]);
r = 1 * P;
% Flutter
for k = 1:length(r)
if (real(r(k)) > 0)
if (imag(r(k)) <= 0)
if size(unstable, 1) < k
unstable = [unstable; zeros(k - size(unstable, 1), 3)];
end
unstable(k, :) = [phi, K_psi, K_theta];
% Proximity check for 1/Ω divergence
freq_1_over_Omega = 0.1; % Replace with the actual value
if abs(real(r(k)) - freq_1_over_Omega) < 0.1
if size(Rdivergence_map, 1) < k
Rdivergence_map = [Rdivergence_map; zeros(k -
size(Rdivergence_map, 1), 3)];
end
Rdivergence_map(k, :) = [phi, K_psi, K_theta];
end
end
end
end
% Divergence
if (real(det(K_matrix)) < 0)
if size(divergence_map, 1) < k
divergence_map = [divergence_map; zeros(k -
size(divergence_map, 1), 3)];
end
divergence_map(k, :) = [phi, K_psi, K_theta];
end
end
end
end
% Plotting
figure;
scatter3(unstable(:,1), unstable(:,2), unstable(:,3), 'r',
'filled');
hold on;
scatter3(Rdivergence_map(:,1), Rdivergence_map(:,2),
Rdivergence_map(:,3), 'g', 'filled');
hold on;
scatter3(divergence_map(:,1), divergence_map(:,2),
divergence_map(:,3), 'b', 'filled');
xlabel('Phi');
ylabel('K_psi');
zlabel('K_theta');
legend('Unstable', '1/Omega Divergence', 'Divergence');
title('Flutter Analysis Results');
Please see attached plot.

Good luck!
Categories
Find more on Antennas, Microphones, and Sonar Transducers in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!