Matlab中如何基于现有变量绘图?需补充代码实现目标波形
双自由度系统位移波形绘图实现方案
你需要添加数值迭代计算逻辑和绘图代码来实现目标波形,以下是完整的可运行代码(包含你已定义的初始变量):
clear; clc; F = 1; M1 = 1; M2 = 1.5; B = 0.1; K1 = 0.2; K2 = 0.15; C1 = [B/M1 - B/M2, B/M2]; C2 = [(K1+K2)/M1, -K1/M1; -K2/M2, K2/M2]; Y = [0.1; 0.1]; dY = [0; 0]; t = 0; dt = 0.1; % 设置总模拟时长,可根据需求调整 T_total = 100; % 初始化数组存储时间、位移数据 t_history = t; Y_history = Y'; % 循环迭代计算系统响应 while t < T_total % 计算加速度:基于双自由度系统运动方程 ddY = -C1*dY - C2*Y + [F/M1; 0]; % 欧拉法更新速度和位移 dY = dY + ddY * dt; Y = Y + dY * dt; t = t + dt; % 保存当前时刻的数据 t_history = [t_history, t]; Y_history = [Y_history, Y']; end % 绘制位移波形 figure; plot(t_history, Y_history(1,:), 'b-', 'LineWidth', 1.5); hold on; plot(t_history, Y_history(2,:), 'r-', 'LineWidth', 1.5); xlabel('时间 t (s)'); ylabel('位移'); legend('M1 位移', 'M2 位移'); title('双自由度系统位移响应'); grid on;
关键部分说明:
- 数值迭代:采用欧拉法求解微分方程,计算每个时间步的加速度、速度和位移,这是得到连续波形的核心
- 数据存储:用数组保存每一步的时间和位移值,避免循环中实时绘图导致的性能问题
- 绘图配置:用不同颜色区分两个质量块的位移曲线,添加坐标轴标签、图例和网格,和目标波形的展示形式一致
如果需要更高精度的计算,可以将欧拉法替换为Matlab内置的ode45函数,但上述代码已能生成类似你目标图的阻尼振动波形。
内容的提问来源于stack exchange,提问作者Fulano
相关产品推荐
相关产品推荐

