matlab循环应力应变曲线处理

文章目录


clc
clear
close all
%位移,力,时间
data=readtable('3-1.xlsx');
data=table2array(data);
%由于是压缩实验,所以要取相反数
data(:,1)=-data(:,1);
data(:,2)=-data(:,2);
figure%原始曲线
plot(data(:,1),data(:,2),'linewidth',2)
xlabel('Dis')
ylabel('Force')

%需要被移除的卸载点是1,加载点是0
index_to_remove = (diff(data(:, 3)) > 0) & (diff(data(:, 1)) < 0);
% % 将符合条件的数据点删除
% %经过差分后,数据点会减少1,因而增加一个false使行数补齐
% result_matrix = data(~[false; index_to_remove], :);
% % figure
% % scatter(result_matrix(:,1),result_matrix(:,2))

figure%完整的单圈循环
% 找到连续的零值片段的索引
zero_segments = bwconncomp(index_to_remove == 0);
for i = 1:zero_segments.NumObjects-1
    startid=zero_segments.PixelIdxList{i}(1);
    endid=zero_segments.PixelIdxList{i+1}(1)-1;
    plot(data(startid:endid,1),data(startid:endid,2),'linewidth',2)
    hold on
end
startid=zero_segments.PixelIdxList{end}(1);
plot(data(startid:end,1),data(startid:end,2),'linewidth',2)

figure%仅保留加载
% 找到连续的零值片段的索引
zero_segments = bwconncomp(index_to_remove == 0);
for i = 1:zero_segments.NumObjects
    startid=zero_segments.PixelIdxList{i}(1);
    endid=zero_segments.PixelIdxList{i}(end);
    plot(data(startid:endid,1),data(startid:endid,2),'linewidth',2)
    hold on
end

在这里插入图片描述

手动提取各循环的模量

clc
clear
close all
spid=5;
comdir=2;%压缩方向,1为z方向,2为x方向
picpath='.\pic'
curvepath='.\curvesxls';
%位移,力,时间
filename=[num2str(spid),'-',num2str(comdir),'.xlsx'];
data=readtable(fullfile(curvepath,filename));
data=table2array(data);
%由于是压缩实验,所以要取相反数
data(:,1)=-data(:,1);
data(:,2)=-data(:,2);
chicun=readtable(fullfile(curvepath,'chicun.xlsx'));
chicun=table2array(chicun);
xlength=chicun(spid,2);
ylength=chicun(spid,2);
zlength=chicun(spid,2);
area=xlength*ylength;
height=zlength;
if comdir==2
area=(xlength*zlength+ylength*zlength)/2;
height=(xlength+ylength)/2;
end
%需要被移除的卸载点是1,加载点是0
index_to_remove = (diff(data(:, 3)) > 0) & (diff(data(:, 1)) < 0);

figure%原始曲线
plot(data(:,1),data(:,2),'linewidth',2)
xlabel('Dis')
ylabel('Force')

a=figure%完整的单圈循环
% 找到连续的零值片段的索引
zero_segments = bwconncomp(index_to_remove == 0);
for i = 1:zero_segments.NumObjects-1
    startid=zero_segments.PixelIdxList{i}(1);
    endid=zero_segments.PixelIdxList{i+1}(1)-1;
    plot(data(startid:endid,1),data(startid:endid,2),'linewidth',2)
    hold on
end
startid=zero_segments.PixelIdxList{end}(1);
plot(data(startid:end,1),data(startid:end,2),'linewidth',2)
xlabel('Dis')
ylabel('Force')
mkdir(fullfile(picpath,[num2str(spid),'-',num2str(comdir)]));
saveas(a, fullfile(picpath,[num2str(spid),'-',num2str(comdir)],'cycle.png'));
%前面的图像是用于观察对不对,在图上随便点一个点,然后关掉
[gx,gy]=ginput(1);
close all


figure%仅保留加载
% 找到连续的零值片段的索引
zero_segments = bwconncomp(index_to_remove == 0);
for id = 1:zero_segments.NumObjects
    startid=zero_segments.PixelIdxList{id}(1);
    endid=zero_segments.PixelIdxList{id}(end);
    strain=data(startid:endid,1);
    stress=data(startid:endid,2);
    plot(strain,stress,'linewidth',2)
    hold on
    [gx,gy]=ginput(2);
    n=size(strain,1);
    num_down=1;%拟合数据起始点编号
    num_up=1;%拟合数据终止点编号
    for i=1:n
        if strain(i)<=gx(1)
            num_down=i;
        else
            num_down=num_down;
        end
        if strain(i)<=gx(2)
            num_up=i;
        else
            num_up=num_up;
        end
    end
    p=polyfit(strain(num_down:num_up),stress(num_down:num_up),1);
    % x1=strain(num_down:num_up);
    % y1 = polyval(p,x1);
    plot([strain(num_down),strain(num_up)],[stress(num_down),stress(num_up)],'--o')
    disp('杨氏模量MPa')
    disp(p(1)*height/area)
    saveas(gca,fullfile(picpath,[num2str(spid),'-',num2str(comdir)],['cycle',num2str(id),'.png']));
    close
end
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值