SDOF with frequency sweep and variable natural frequency

117 views (last 30 days)
Lucrezia
Lucrezia on 12 Oct 2025 at 8:21
Edited: Torsten on 13 Oct 2025 at 21:40
Hi, I'm trying to understand if the syntax of my code is correct and the results I'm seeing are right; the problem I'm studying doesn't get a lot of attention and the literature about it is scarce, so my options are limited and I tried everything but I just cannot find where the error is IF there is.
Basically I'm modelling a simple SDOF system with the equations expressed in the State Space, so instead of a single second order ODE, I have a system of two first order ODEs. The frequency is swept from a starting frequency f0 to an end frequency f1 linearly, instead of a constant frequency (like is done usually). This causes beats in the response after crossing a resonance.
I have implemented this case into my code and checked the results with a paper that considers the LTI system.
Problems arise the moment I try to implement a varying stiffness k(t) linearly with time (the natural frequency of the system gets higher or lower with time based on the case considered, and the stiffness used is linked to it by a simple formula k=(Omega(t)^2)*mass). The system becomes an LTV which I solved using the example in ode45's page with time dependant coefficients.
To know if my code works I tried to confront the results with a paper I found from the 90s, this article uses a dimensionless formulation. I start from this dimensionless fromulation and its parameters and I retrieve the dimensional parameters that I need, then to confront the results I bring the calculated solution back again in the dimensionless formulation. I'm going to attach the code and the article to understand better the problem.
The fact is that, I cannot reproduce the graphs in figure 3, the amplitude is right but not the x values at which the peak shows up, so probably I'm doing something wrong with the solution of the system.
Code:
m=0.1;
fn0=1000; % Natural frequency 0 rpms
OmegaN_0= 2*pi*fn0;
f0=0;
f1=5000;
F0=1;
Zeta_f= 0.025; % Damping
alpha=0.004; % Adimensional Sweep Rate: OmegaF_dot/OmegaR^2
beta=[-0.002,0.0,0.002]; % Adimensional Stiffening Rate: Omegan_dot/OmegaR^2
OmegaR=(alpha.*OmegaN_0)./(alpha-beta); % Sweep-Stiffening crossing
OmegaF_dot=(OmegaR.^2).*alpha; % Acceleration Rate
OmegaN_dot=(OmegaR.^2).*beta; % Stiffening Rate
c=2*m*Zeta_f.*OmegaR;
q_char=F0./(m.*OmegaR.^2);
t_end=(f1-f0)./(OmegaF_dot/(2*pi));
for i=1:length(beta)
c_i=c(i);
% Initial conditions
y0 = [0;0];
dt=0.000001;
opts = odeset(RelTol=1e-9,AbsTol=1e-9);
[t_sol, y_sol] = ode89(@(t,y) state(t,y,m,c_i,f0,F0,OmegaF_dot,OmegaN_dot,OmegaN_0,i),0:dt:t_end(i),y0,opts);
% Output
x = y_sol(:,1);
v = y_sol(:,2);
f=f0+(OmegaF_dot(i)/(2*pi))*t_sol;
OmegaF=2*pi*f;
eta_tau{i}=OmegaF/OmegaR(i);
Q{i}=x/q_char(i);
Q_env{i}=abs(hilbert(Q{i}));
end
function dydt=state(t,y,m,c_i,f0,F0,OmegaF_dot,OmegaN_dot,OmegaN_0,i)
F_t=F0*cos((0.5*OmegaF_dot(i)*(t^2))+(2*pi*f0)*t);
% stiffening
OmegaN=OmegaN_0+OmegaN_dot(i)*((2*pi*f0)/(OmegaF_dot(i)))+OmegaN_dot(i)*t; % natural omega [rad/s]
k=(OmegaN^2)*m; % stiffness [N/m]
dydt=zeros(2,1);
dydt(1)=y(2);
dydt(2)=(1/m)*(F_t-c_i*y(2)-k*y(1));
end
I used the same parameters used in the article, also to give context, everything is normalized with respect to OmegaR (crossing between the excitation frequency and natural frequency straight lines) into said paper (page 2 and 5 are sufficient for the scope of the post, everything else is useless for this matlab code).
I just need a check on the syntax for the LTV system solution, the article is present to better understand everything.
Thanks in advance.
  9 Comments
Lucrezia
Lucrezia on 13 Oct 2025 at 20:45
it's the same, try it with: omega=10+0.5*t and Omega=5*t, thus Omega0=0.
Torsten
Torsten on 13 Oct 2025 at 21:05
Edited: Torsten on 13 Oct 2025 at 21:40
Yes, it works for Omega0 = 0. But who knows whether the authors used Omega0 = 0 for their figure ?
Ok, I looked through your code, and for Omega0 = 0 and f0 = 0, I agree that you correctly implemented the dimensional equation.
But the equation
m * qdotdot + c * qdot + m * (omega0 + omegadot*t)^2 * q = fhat * cos(Theta0 + Omega0*t + 0.5*Omegadot*t^2)
shows that you had to assume values for m, omega0, fhat, Theta0 and Omega0 (=0). At least for me it's not obvious that the results should be qualitatively similar to figure (3) of the article.

Sign in to comment.

Answers (0)

Categories

Find more on Mathematics in Help Center and File Exchange

Products


Release

R2024b

Community Treasure Hunt

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

Start Hunting!