MATLAB钢筋混凝土偏心受压(拉)构件M-N相关曲线绘制

MATLAB钢筋混凝土偏心受压(拉)构件M-N相关曲线绘制

一、理论基础

钢筋混凝土偏心受压(拉)构件的M-N相关曲线描述了构件在不同轴力N作用下所能承受的弯矩M的能力。该曲线反映了压弯和拉弯构件的力学行为特征,是结构设计和承载力分析的重要依据。

1.1 基本方程

对于矩形截面偏心受压构件,基于平截面假定和材料本构关系,可得以下平衡方程:

轴力平衡:

弯矩平衡:

其中:

1.2 破坏形态判别

根据相对受压区高度与界限相对受压区高度的关系,判别破坏形态:

  1. 大偏心受压):

    • 受拉钢筋先屈服
    • 受压区混凝土后压碎
    • 延性较好
  2. 小偏心受压):

    • 受压区混凝土先压碎
    • 受拉钢筋可能不屈服
    • 脆性破坏

二、MATLAB实现程序

function reinforced_concrete_MN_curve()
    % 钢筋混凝土偏心受压(拉)构件M-N相关曲线绘制
    % 作者:MATLAB助手
    % 日期:2023-10-15
    
    % 清除环境变量
    clc; clear; close all;
    
    % 1. 输入截面参数
    params = input_section_parameters();
    
    % 2. 输入材料参数
    materials = input_material_properties();
    
    % 3. 计算M-N曲线
    [N, M] = calculate_MN_curve(params, materials);
    
    % 4. 绘制M-N曲线
    plot_MN_curve(N, M, params);
    
    % 5. 保存计算结果
    save_results(N, M, params, materials);
end

function params = input_section_parameters()
    % 输入截面几何参数
    params = struct();
    
    % 截面尺寸 (mm)
    params.b = input('请输入截面宽度 b (mm): ');       % 截面宽度
    params.h = input('请输入截面高度 h (mm): ');       % 截面高度
    params.as = input('请输入受拉钢筋保护层厚度 as (mm): '); % 受拉钢筋保护层厚度
    params.as_prime = input('请输入受压钢筋保护层厚度 as'' (mm): '); % 受压钢筋保护层厚度
    
    % 钢筋配置
    params.As = input('请输入受拉钢筋截面积 As (mm²): ');       % 受拉钢筋截面积
    params.As_prime = input('请输入受压钢筋截面积 As'' (mm²): '); % 受压钢筋截面积
    
    % 有效高度计算
    params.h0 = params.h - params.as;          % 截面有效高度
    params.h0_prime = params.h - params.as_prime; % 受压区有效高度
    
    % 显示参数
    fprintf('\n===== 截面参数汇总 =====\n');
    fprintf('截面宽度 b: %.0f mm\n', params.b);
    fprintf('截面高度 h: %.0f mm\n', params.h);
    fprintf('受拉钢筋保护层厚度 as: %.0f mm\n', params.as);
    fprintf('受压钢筋保护层厚度 as'': %.0f mm\n', params.as_prime);
    fprintf('受拉钢筋截面积 As: %.0f mm²\n', params.As);
    fprintf('受压钢筋截面积 As'': %.0f mm²\n', params.As_prime);
    fprintf('截面有效高度 h0: %.0f mm\n', params.h0);
end

function materials = input_material_properties()
    % 输入材料参数
    materials = struct();
    
    % 混凝土参数
    materials.fc = input('请输入混凝土轴心抗压强度 fc (MPa): ');   % 混凝土轴心抗压强度
    materials.ft = input('请输入混凝土轴心抗拉强度 ft (MPa): ');   % 混凝土轴心抗拉强度
    materials.alpha1 = input('请输入混凝土应力图形系数 α1 (C50以下取1.0): '); % 混凝土应力图形系数
    materials.beta1 = input('请输入混凝土等效矩形应力图系数 β1: '); % 混凝土等效矩形应力图系数
    materials.ecu = input('请输入混凝土极限压应变 εcu: ');         % 混凝土极限压应变
    
    % 钢筋参数
    materials.fy = input('请输入钢筋屈服强度 fy (MPa): ');         % 钢筋屈服强度
    materials.fy_prime = input('请输入受压钢筋屈服强度 fy'' (MPa): '); % 受压钢筋屈服强度
    materials.Es = input('请输入钢筋弹性模量 Es (MPa): ');         % 钢筋弹性模量
    
    % 计算界限相对受压区高度
    materials.xi_b = materials.beta1 / (1 + materials.fy/(materials.Es * materials.ecu));
    
    % 显示参数
    fprintf('\n===== 材料参数汇总 =====\n');
    fprintf('混凝土轴心抗压强度 fc: %.1f MPa\n', materials.fc);
    fprintf('混凝土轴心抗拉强度 ft: %.2f MPa\n', materials.ft);
    fprintf('混凝土应力图形系数 α1: %.1f\n', materials.alpha1);
    fprintf('混凝土等效矩形应力图系数 β1: %.1f\n', materials.beta1);
    fprintf('混凝土极限压应变 εcu: %.4f\n', materials.ecu);
    fprintf('钢筋屈服强度 fy: %.0f MPa\n', materials.fy);
    fprintf('受压钢筋屈服强度 fy'': %.0f MPa\n', materials.fy_prime);
    fprintf('钢筋弹性模量 Es: %.0f MPa\n', materials.Es);
    fprintf('界限相对受压区高度 ξb: %.3f\n', materials.xi_b);
end

function [N, M] = calculate_MN_curve(params, materials)
    % 计算M-N相关曲线
    
    % 初始化结果数组
    N = [];
    M = [];
    
    % 1. 计算轴心受压承载力
    N0 = 0.9 * (materials.alpha1 * materials.fc * params.b * params.h + ...
                materials.fy * (params.As + params.As_prime));
    
    % 2. 计算纯弯承载力
    xi_b = materials.xi_b;
    x_b = xi_b * params.h0;
    
    % 大偏心受压时受拉钢筋应力
    sigma_s = materials.fy;
    
    % 纯弯弯矩
    M0 = materials.alpha1 * materials.fc * params.b * x_b * (params.h0 - x_b/2) + ...
         materials.fy_prime * params.As_prime * (params.h0 - params.as_prime);
    
    % 3. 计算不同轴力下的弯矩承载力
    N_points = 100; % 计算点数
    
    % 大偏心受压段 (N从0到0.5*N0)
    N1 = linspace(0, 0.5*N0, N_points/2);
    for i = 1:length(N1)
        N_val = N1(i);
        
        % 计算受压区高度
        x = N_val / (materials.alpha1 * materials.fc * params.b);
        
        % 检查是否超过界限
        if x > xi_b * params.h0
            x = xi_b * params.h0;
        end
        
        % 计算弯矩
        M_val = materials.alpha1 * materials.fc * params.b * x * (params.h0 - x/2) + ...
                materials.fy_prime * params.As_prime * (params.h0 - params.as_prime);
        
        N = [N, N_val];
        M = [M, M_val];
    end
    
    % 小偏心受压段 (N从0.5*N0到N0)
    N2 = linspace(0.5*N0, N0, N_points/2);
    for i = 1:length(N2)
        N_val = N2(i);
        
        % 线性插值计算弯矩
        t = (N_val - 0.5*N0) / (0.5*N0);
        M_val = M0 * (1 - t);
        
        N = [N, N_val];
        M = [M, M_val];
    end
    
    % 4. 计算偏心受拉情况
    Nt = linspace(0, -0.2*N0, N_points/2); % 拉力范围
    for i = 1:length(Nt)
        N_val = Nt(i);
        
        % 简化计算:受拉区混凝土退出工作
        M_val = (abs(N_val) * (params.h/2 - params.as)) + ...
                0.5 * materials.ft * params.b * (params.h/2 - params.as)^2;
        
        N = [N, N_val];
        M = [M, M_val];
    end
    
    % 单位转换 (N->kN, N*mm->kN*m)
    N = N / 1000;
    M = M / 1e6;
end

function plot_MN_curve(N, M, params)
    % 绘制M-N相关曲线
    
    figure('Position', [100, 100, 1000, 800], 'Name', '钢筋混凝土M-N相关曲线');
    
    % 主曲线
    plot(N, M, 'b-', 'LineWidth', 2);
    hold on;
    grid on;
    
    % 标记关键点
    [~, idx_max] = max(M);
    plot(N(idx_max), M(idx_max), 'ro', 'MarkerSize', 8, 'MarkerFaceColor', 'r');
    text(N(idx_max), M(idx_max), sprintf('  (%.1f kN, %.1f kN·m)', N(idx_max), M(idx_max)), ...
        'VerticalAlignment', 'bottom');
    
    % 标注区域
    text(mean(N(1:50)), mean(M(1:50)), '大偏心受压区', 'FontSize', 12, 'BackgroundColor', 'white');
    text(mean(N(51:end-50)), mean(M(51:end-50)), '小偏心受压区', 'FontSize', 12, 'BackgroundColor', 'white');
    text(mean(N(end-49:end)), mean(M(end-49:end)), '偏心受拉区', 'FontSize', 12, 'BackgroundColor', 'white');
    
    % 坐标轴标签
    xlabel('轴力 N (kN)', 'FontSize', 12);
    ylabel('弯矩 M (kN·m)', 'FontSize', 12);
    title(sprintf('钢筋混凝土偏心受压(拉)构件M-N相关曲线\n截面: %dx%d mm, As=%.0f mm², As\'=%.0f mm²', ...
                  params.b, params.h, params.As, params.As_prime), 'FontSize', 14);
    
    % 图例和网格
    legend('M-N曲线', '最大弯矩点', 'Location', 'NorthWest');
    set(gca, 'FontSize', 11);
    
    % 添加网格
    grid minor;
    
    % 保存图像
    saveas(gcf, 'RC_MN_Curve.png');
end

function save_results(N, M, params, materials)
    % 保存计算结果到文件
    
    filename = 'RC_MN_Curve_Results.csv';
    fid = fopen(filename, 'w');
    
    % 写入标题行
    fprintf(fid, '轴力N(kN),弯矩M(kN·m)\n');
    
    % 写入数据
    for i = 1:length(N)
        fprintf(fid, '%.2f,%.2f\n', N(i), M(i));
    end
    
    fclose(fid);
    
    % 保存参数信息
    param_filename = 'RC_Parameters.txt';
    fid = fopen(param_filename, 'w');
    
    fprintf(fid, '===== 钢筋混凝土M-N曲线分析参数 =====\n\n');
    
    fprintf(fid, '【截面参数】\n');
    fprintf(fid, '截面宽度 b: %.0f mm\n', params.b);
    fprintf(fid, '截面高度 h: %.0f mm\n', params.h);
    fprintf(fid, '受拉钢筋保护层厚度 as: %.0f mm\n', params.as);
    fprintf(fid, '受压钢筋保护层厚度 as'''': %.0f mm\n', params.as_prime);
    fprintf(fid, '受拉钢筋截面积 As: %.0f mm²\n', params.As);
    fprintf(fid, '受压钢筋截面积 As'''': %.0f mm²\n', params.As_prime);
    fprintf(fid, '截面有效高度 h0: %.0f mm\n\n', params.h0);
    
    fprintf(fid, '【材料参数】\n');
    fprintf(fid, '混凝土轴心抗压强度 fc: %.1f MPa\n', materials.fc);
    fprintf(fid, '混凝土轴心抗拉强度 ft: %.2f MPa\n', materials.ft);
    fprintf(fid, '混凝土应力图形系数 α1: %.1f\n', materials.alpha1);
    fprintf(fid, '混凝土等效矩形应力图系数 β1: %.1f\n', materials.beta1);
    fprintf(fid, '混凝土极限压应变 εcu: %.4f\n', materials.ecu);
    fprintf(fid, '钢筋屈服强度 fy: %.0f MPa\n', materials.fy);
    fprintf(fid, '受压钢筋屈服强度 fy'''': %.0f MPa\n', materials.fy_prime);
    fprintf(fid, '钢筋弹性模量 Es: %.0f MPa\n', materials.Es);
    fprintf(fid, '界限相对受压区高度 ξb: %.3f\n', materials.xi_b);
    
    fclose(fid);
    
    fprintf('\n分析结果已保存到文件:\n');
    fprintf('- 曲线数据: %s\n', filename);
    fprintf('- 参数信息: %s\n', param_filename);
end

三、程序使用说明

3.1 输入参数示例

运行程序后,依次输入以下参数:

请输入截面宽度 b (mm): 300
请输入截面高度 h (mm): 500
请输入受拉钢筋保护层厚度 as (mm): 40
请输入受压钢筋保护层厚度 as' (mm): 40
请输入受拉钢筋截面积 As (mm²): 1520
请输入受压钢筋截面积 As' (mm²): 1520

请输入混凝土轴心抗压强度 fc (MPa): 14.3
请输入混凝土轴心抗拉强度 ft (MPa): 1.43
请输入混凝土应力图形系数 α1 (C50以下取1.0): 1.0
请输入混凝土等效矩形应力图系数 β1: 0.8
请输入混凝土极限压应变 εcu: 0.0033

请输入钢筋屈服强度 fy (MPa): 360
请输入受压钢筋屈服强度 fy' (MPa): 360
请输入钢筋弹性模量 Es (MPa): 200000

3.2 输出结果

程序将生成:

  1. M-N相关曲线图(保存为RC_MN_Curve.png
  2. 曲线数据点CSV文件(RC_MN_Curve_Results.csv
  3. 参数信息文本文件(RC_Parameters.txt

3.3 曲线特征分析

生成的M-N曲线包含三个典型区域:

  1. 大偏心受压区(左侧):轴力较小,弯矩较大,受拉钢筋先屈服
  2. 小偏心受压区(中部):轴力中等,弯矩减小,受压区混凝土先压碎
  3. 偏心受拉区(右侧):轴力为拉力,混凝土受拉退出工作

参考代码 绘制钢筋混凝土偏心受压(拉)构建的m-n相关曲线 www.youwenfan.com/contentcss/96091.html

四、工程应用价值

  1. 承载力评估:快速评估构件在不同荷载组合下的承载力
  2. 截面优化:指导截面尺寸和配筋设计
  3. 安全性分析:评估结构在极端荷载下的性能
  4. 施工质量控制:验证实际配筋是否满足设计要求
  5. 加固方案设计:评估加固后构件的承载性能

五、扩展功能建议

  1. 非线性分析:考虑材料非线性(混凝土塑性、钢筋硬化)
  2. 双向偏心:扩展至双向偏心受压情况
  3. 预应力混凝土:增加预应力钢筋分析模块
  4. 时变效应:考虑徐变和收缩对M-N曲线的影响
  5. 交互界面:开发GUI界面方便参数输入和结果查看

 

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