Matlab绘制单自由度(SDOF)自由振动响应无图像输出问题求助
SDOF系统自由振动绘图问题修复方案
原代码核心问题
- 初始条件错误:自由振动场景下初始位移、初始速度都设为0,系统本来就不会产生振动响应,输出全为0
- 未存储历史计算结果:循环过程中只保留了最后一步的时间和状态值,
plot时仅能绘制单个点,无法生成曲线 - 状态更新逻辑错误:每次循环没有将计算得到的新状态赋值给
x_vector,后续迭代始终使用初始状态计算 - 冗余的激励逻辑:自由振动无外荷载,不需要调用
EXIT函数,也不需要额外设置f_vector激励项 - 时间变量混用:提前定义的
t向量未被正确使用,循环中t_i每次被覆盖为单值
修复后实现代码
% SDOF自由振动位移响应绘制 z = 0.05; w = 2*pi; dt = 0.05; Tmax = 3; % 调整初始条件,给非零初始位移触发自由振动 x0 = 0.1; v0 = 0; x_vector = [x0; v0]; t = 0:dt:Tmax; n_step = length(t); % 预分配数组存储每一步的位移结果 x_res = zeros(1, n_step); x_res(1) = x_vector(1); w_d = w*sqrt(1-z^2); % 以下为DHMAT示例内容,若你原有DHMAT脚本正确可保留原有调用 A = [exp(-z*w*dt)*(cos(w_d*dt) + z*w/w_d*sin(w_d*dt)), exp(-z*w*dt)*sin(w_d*dt)/w_d; -exp(-z*w*dt)*w^2*sin(w_d*dt)/w_d, exp(-z*w*dt)*(cos(w_d*dt) - z*w/w_d*sin(w_d*dt))]; % 循环迭代计算每一步响应 for i = 2:n_step % 自由振动无外荷载,仅用状态转移矩阵更新即可 x_vector = A * x_vector; x_res(i) = x_vector(1); end % 绘制位移-时间曲线 plot(t, x_res, 'LineWidth',1.5) xlabel('时间 t (s)') ylabel('位移 x (m)') title('SDOF系统自由振动位移响应曲线') grid on
运行后即可生成0~3秒范围内的小阻尼SDOF系统自由振动位移响应曲线,符合初始位移0.1m下的衰减振动规律。
内容的提问来源于stack exchange,提问作者Nidhi
相关产品推荐
相关产品推荐

