编写一个简单的M文件,计算二阶动态系统的阶跃响应,ζ值从0.1到1,且绘制出一簇阶跃响应曲线
时间: 2024-09-26 19:17:42 浏览: 44
在Matlab中,你可以编写一个M文件(.m文件)来模拟二阶动态系统(如阻尼振动系统)的阶跃响应。首先,我们需要定义一个函数,它接受ζ(阻尼比)作为输入参数,并返回相应的阶跃响应。以下是一个基本的示例:
```matlab
function [time, response] = step_response(omega_d, zeta)
% 定义常数和初始条件
dt = 0.01; % 时间步长
t_end = 10; % 总时间
t = 0:dt:t_end;
x0 = 0; % 初始位置
v0 = 0; % 初始速度
% 系统参数
omega_n = sqrt(1); % 自然频率
A = (1 - zeta^2) / (2 * zeta * omega_n);
% 阶跃响应方程的解
response = A * exp(- exp(-zeta * omega_n * t)) ./ (2 * zeta * omega_n);
end
% 创建一组ζ值
zs = linspace(0.1, 1, 50); % 从0.1到1,包含50个点
% 计算并存储每个ζ下的响应
[num_samples, num_zetas] = size(zs);
time = zeros(num_samples, 1);
response_matrix = zeros(num_samples, num_zetas);
for i = 1:num_zetas
zeta = zs(i);
[time(:,i), response_matrix(:,i)] = step_response(1, zeta); % 使用ωd=1,因为阶跃响应通常与自然频率无关
end
% 绘制阶跃响应曲线
figure;
hold on;
for j = 1:num_zetas
plot(time, response_matrix(:,j), 'LineWidth', 1.5, 'DisplayName', ['ζ=' num2str(zs(j))]);
end
title('二阶动态系统阶跃响应曲线');
xlabel('时间 (s)');
ylabel('响应');
legend('show');
hold off;
```
在这个脚本中,我们先定义了一个`step_response`函数用于求解阶跃响应,然后创建了一系列ζ值并计算对应的响应数据。最后,我们将所有响应曲线一起绘制出来。
阅读全文