How to solve damped forced vibration analysis using ode45 ?
조회 수: 33 (최근 30일)
이전 댓글 표시
I am trying to solve equation of motion for a damped forced vibration analysis for a SDOF system. My input Force is function of time having random white noise. I am using ode45 to solve the problem. Here is my code.
% Main code
clear variables
close all
clc
t = 0:20; % Time duration
x = [1; 6]; % Initial conditions
[t, x] = ode45(@eqm,t,x); % ode45 command
Below is the function eqm
% Function
function dxdt = eqm(t, x)
F = 1:20 % For simplicity I have taken force as an array
m = 1; % mass
c = 1; % damping
k = 1; % stiffness
dxdt = [x(2); F/m - c/m*x(2) - k*x(1)];
end
After I run this code it shows error "Error using vertcat. Dimensions of arrays being concatenated are not consistent". I checked online but most of the examples contains only periodic functions of force such as F = sin(wt) but I didn't find anything for random load. Any help will be greatly appreciated.
댓글 수: 0
채택된 답변
Star Strider
2021년 7월 23일
One problem is with the ‘dxdt’ assignment. MATLAB interprets the spaces as delimiters, so the second row has 3 columns, as MATLAB sees it. Put parentheses around the second row terms (to preserve readability) and after providing ‘F’ as an argument rather than internally as a vector, and a few other tweaks, it works —
t = 0:20; % Time duration
x0 = [1; 6]; % Initial conditions
F = 1:20; % For simplicity I have taken force as an array
for k = 1:numel(F)
[t, x] = ode45(@(t,x)eqm(t,x,F(k)),t,x0); % ode45 command
tv{k} = t;
xv{k} = x;
end
figure
for k = 1:numel(F)
subplot(5,4,k)
plot(tv{k}, xv{k})
title(sprintf('k = %2d',k))
grid
end
% Function
function dxdt = eqm(t, x, F)
m = 1; % mass
c = 1; % damping
k = 1; % stiffness
dxdt = [x(2); (F/m - c/m*x(2) - k*x(1))];
end
.
댓글 수: 6
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Ordinary Differential Equations에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!