You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 04:54:03