MATLAB钢筋混凝土偏心受压(拉)构件M-N相关曲线绘制
一、理论基础
钢筋混凝土偏心受压(拉)构件的M-N相关曲线描述了构件在不同轴力N作用下所能承受的弯矩M的能力。该曲线反映了压弯和拉弯构件的力学行为特征,是结构设计和承载力分析的重要依据。
1.1 基本方程
对于矩形截面偏心受压构件,基于平截面假定和材料本构关系,可得以下平衡方程:
轴力平衡:
弯矩平衡:
其中:
:混凝土应力图形系数(C50及以下取1.0) :混凝土轴心抗压强度设计值 :截面宽度 :混凝土受压区高度 :受压钢筋屈服强度 :受压钢筋截面积 :受拉钢筋应力 :受拉钢筋截面积 :截面有效高度 :受压钢筋合力点至受压边缘距离
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 输出结果
程序将生成:
- M-N相关曲线图(保存为
RC_MN_Curve.png) - 曲线数据点CSV文件(
RC_MN_Curve_Results.csv) - 参数信息文本文件(
RC_Parameters.txt)
3.3 曲线特征分析
生成的M-N曲线包含三个典型区域:
- 大偏心受压区(左侧):轴力较小,弯矩较大,受拉钢筋先屈服
- 小偏心受压区(中部):轴力中等,弯矩减小,受压区混凝土先压碎
- 偏心受拉区(右侧):轴力为拉力,混凝土受拉退出工作
参考代码 绘制钢筋混凝土偏心受压(拉)构建的m-n相关曲线 www.youwenfan.com/contentcss/96091.html
四、工程应用价值
- 承载力评估:快速评估构件在不同荷载组合下的承载力
- 截面优化:指导截面尺寸和配筋设计
- 安全性分析:评估结构在极端荷载下的性能
- 施工质量控制:验证实际配筋是否满足设计要求
- 加固方案设计:评估加固后构件的承载性能
五、扩展功能建议
- 非线性分析:考虑材料非线性(混凝土塑性、钢筋硬化)
- 双向偏心:扩展至双向偏心受压情况
- 预应力混凝土:增加预应力钢筋分析模块
- 时变效应:考虑徐变和收缩对M-N曲线的影响
- 交互界面:开发GUI界面方便参数输入和结果查看