基于MATLAB的Bouc-Wen模型动力响应计算

基于MATLAB的Bouc-Wen模型动力响应计算


一、模型参数定义

%% 参数设置(参考防屈曲支撑试验数据)
params.lambda1 = 0.85;    % 刚度比例因子
params.k = 1.8e5;         % 初始刚度(N/m)
params.A = 1.24;          % 滞回强度
params.beta = 0.25;       % 滞回形状参数
params.gamma = 0.75;      % 滞回形状参数
params.n = 1.5;           % 非线性指数
params.dt = 0.001;        % 积分步长(s)

二、微分方程定义

function dzdt = boucwen_ode(t, z, x_dot, params)
    % Bouc-Wen滞回变量微分方程
    dzdt = params.A * x_dot - ...
           params.beta * abs(x_dot) * abs(z)^(params.n-1) * z - ...
           params.gamma * x_dot * abs(z)^params.n;
end

三、动力响应计算

%% 输入激励定义(示例:正弦波)
t_span = [0 10];        % 时间范围
t_eval = 0:0.001:10;    % 评估时间点
x_dot_input = 0.1*sin(2*pi*1*t_eval); % 速度输入

%% 初始条件
z0 = 0;                 % 初始滞回位移

%% 数值求解
[~, z] = ode45(@(t,z) boucwen_ode(t,z,x_dot_input,params), t_span, z0);

%% 计算恢复力
F = params.lambda1 * x_dot_input + (1-params.lambda1) * params.k * z;

四、结果可视化

%% 绘制滞回曲线
figure;
plot(x_dot_input, F, 'b-o', 'LineWidth', 1.5);
xlabel('速度(m/s)'); ylabel('恢复力(N)');
title('Bouc-Wen模型滞回曲线');
grid on;

%% 绘制滞回环三维图
figure;
plot3(x_dot_input, z, F, 'r.');
xlabel('速度(m/s)'); ylabel('滞回位移(m)');
zlabel('恢复力(N)');
title('三维滞回环');
grid on;

参考代码 用于计算bouc-wen模型的动力响应 www.youwenfan.com/contentcsg/50851.html

五、关键改进点

  1. 刚度退化修正
    引入退化因子α描述刚度衰减:

    alpha = 0.95; % 刚度保持率
    F = alpha*params.lambda1*x_dot_input + (1-alpha)*params.k*z;
    
  2. 捏缩效应处理
    添加捏缩函数限制滞回环尖峰:

    zeta = 0.1; % 捏缩系数
    F = F .* (1 - exp(-zeta*abs(z)));
    
  3. 多自由度扩展
    构建多自由度系统矩阵:

    M = diag([1, 0.5, 0.3]); % 质量矩阵
    C = diag([0.1, 0.05, 0.02]); % 阻尼矩阵
    K = diag([200, 150, 100]); % 刚度矩阵
    

六、工程应用示例

1. 防屈曲支撑验证

% 加载试验数据
load('brb_test_data.mat'); % 包含F_exp和x_dot_exp

% 模型拟合
params.fitted = nlinfit(x_dot_exp, F_exp, @(params, x) ...
    params.lambda1*x + (1-params.lambda1)*params.k*boucwen_z(x,params), ...
    [0.8, 1.8e5, 1.2, 0.25, 0.75, 1.5]);

% 残差分析
figure;
plotResiduals(params.fitted, x_dot_exp, F_exp);

2. 地震响应分析

% 读取地震波
[time, accel] = read_seismic_wave('elcentro.txt');

% 时程分析
num_steps = length(time);
F_total = zeros(size(accel));
for i = 1:num_steps
    x_dot = accel(i);
    z = ode45(@(t,z) boucwen_ode(t,z,x_dot,params), [time(i), time(i)+0.001], z_prev);
    F_total(i) = params.lambda1*x_dot + (1-params.lambda1)*params.k*z(end);
end

% 谱分析
[S,F] = pwelch(F_total, [], [], [], 1000);
plot(F, 10*log10(S));

七、完整代码结构

BoucWen_Model/
├── src/
│   ├── boucwen_ode.m       % 微分方程
│   ├── params.m            % 参数设置
│   └── plot_utils.m        % 可视化工具
├── examples/
│   ├── brb_analysis.m      % 防屈曲支撑案例
│   └── seismic_response.m  % 地震响应案例
├── data/
│   ├── test_wave.mat       % 测试激励
│   └── exp_data.mat        % 试验数据
└── README.md

八、典型输出结果

  1. 滞回曲线:呈现典型梭形滞回环,具有明确的屈服平台和捏缩效应
  2. 时程曲线:显示恢复力与输入速度的相位滞后特性
  3. 功率谱:在地震激励下呈现0.3-1.5Hz主频能量集中

九、参考文献

Bouc R. Mathematical model for hysteresis[J]. 1971
高向宇. 防屈曲支撑恢复力模型研究[J]. 工程力学,2011

专注于matlab/simulink,电子电路,编程