雨流计数法的matlab实现,采用三点法与四点法

介绍

雨流计数法是20世纪50年代由英国的两位工程师M.Matsuishi和T.Endo提出来的。该计数法的主要功能是把实测载荷历程简化为若干个载荷循环,供疲劳寿命估算和编制疲劳试验载荷谱使用。它以双参数法为基础,考虑了动强度(幅值)和静强度(均值)两个变量,符合疲劳载荷本身固有的特性。雨流计数法主要用于工程界,特别在疲劳寿命计算中运用非常广泛

计数规则

(1)雨流依次从载荷时间历程的峰值位置的内侧沿着斜坡往下流;
(2)雨流从某一个峰值点开始流动,当遇到比其起始峰值更大的峰值时要停止流动;
(3)雨流遇到上面流下的雨流时,必须停止流动;
(4)取出所有的全循环,记下每个循环的幅度;

(5)将第一阶段计数后剩下的发散收敛载荷时间历程等效为一个收敛发散型的载荷时间历程,进行第二阶段的雨流计数。计数循环的总数等于两个计数阶段的计数循环之和。

计算举例

在图1中,雨流法从1点开始,该点认为是最小值。雨流流至2点,竖直下滴到3与4点幅值间的2ˊ点,然后流到4点,最后停于比1点更负的峰值5的对应处。得出一个从1到4的半循环。下一个雨流从峰值2点开始,流经3点,停于4点的对面,因为4点是比开始的2点具有更正的最大值,得出一个半循环2-3。第三个流动从3点开始,因为遇到由2点滴下的雨流,所以终止于2ˊ点,得出半循环3-2ˊ。这样,3-2和2-3就形成了一个闭合的应力-应变回路环,它们配成一个完全的循环2′-3-2。

  • 下一个雨流从峰值4开始,流经5点,竖直下滴到6和7之间的5ˊ点,继续往下流,再从7点竖直下滴到峰值10的对面,因为10点比4点具有更正的最大值。得出半循环4-5-7。
  • 第五个流动从5点开始,流到6点,竖直下滴,终止于7点的对面,因为7点比5点具有更负的极小值。取出半循环5-6。第六个流动从6点开始,因为遇到由5点滴下的雨滴,所以流到5ˊ点终止。半循环6-5与5-6配成一个完全循环5ˊ-6-5,取出5ˊ-6-5。
  • 第七个流动从7点开始,经过8点,下落到9-10线上的8ˊ点,然后到最后的峰值10,取出半循环7-8-10。第八个流动从8点开始,流至9点下降到10点的对面终止,因为10点比8点具有更正的最大值。取出半循环8-9。最后一个流动从9点开始,因为遇到由8点下滴的雨流,所以终止于8ˊ点。取出半循环9-8ˊ。把两个半循环8-9和9-8ˊ配对,组成一个完全的循环8-9-8ˊ。
  • 这样,图1所示的应变一时间记录包括三个完全循环8-9-8ˊ,2-3-2ˊ,5-6-5ˊ和三个半循环1-2-4,4-5-7,7-8-10。图1表明,雨流法得到的应变是与材料应力-应变特性相一致的。从图1中看出,有三个完全的循环,与此对应,在图2中有三个阴影线所示的闭合回路。

                


matlab的三点法实现

clear;clc
C=xlsread('load_F');%%%%%%%%%在此修改加载的文件名,数据格式一直才可正确运算%%%
B=C;A=C;
q=length(A);
%三点循环计数法;部分参考SAE ASTM标准
%% 步骤一 %%
%对载荷时间历程进行处理使它只包含峰谷峰谷交替出现
m=q;
for i=2:1:m-1
    if A(i-1)A(i)&&A(i)>A(i+1)
        B(i)=NaN;
    end
end
B(isnan(B))=[];
%% 步骤二 %%
%对载荷时间历程再造,使从最大(小)值拆开,前后拼接,使从最值开始最值结束
[a,b]=max(B);
n=length(B);
B1=B(b:n);
B2=B(1:b);
B=[B1;B2];
%% 步骤三 %%
%再只留波峰波谷,防止拼接处出现不合理的数据
A=B;m=length(B);
for i=2:1:m-1
    if A(i-1)A(i)&&A(i)>A(i+1)
        B(i)=NaN;
    end
end
B(isnan(B))=[];n=length(B);
%%%%%%%%%%%%%%%%%%%%%%%%  B为改造后载荷时间历程  n为B中波峰波谷的个数
%% 步骤四 %%
%雨流计数记因素  1幅值F 2均值J  开启无脑循环模式
F=[];J=[];D=B;
while length(B)>=1
    n=length(B);
    if n==1
        break
    elseif n>1
        for j=1:n-2
            s1=abs(B(j+1)-B(j));
            s2=abs(B(j+1)-B(j+2));
            e3=(B(j)+B(j+1))/2;
            if s1<=s2
                F=[F;s1];
                J=[J;e3];
                B(j)=[];
                B(j)=[];
                n=length(B);
                break;
            else
                continue;
            end
        end
    end
    continue
end
%% 步骤五 %%
%画图像 三维hist三维图像
X=[J,F];
figure;hist3(X,[30 30]);
xlabel('均值');
title('雨流计数法-三点循环计数运算逻辑');
ylabel('幅值');
zlabel('循环次数');
%% 检验说明 %%
% load_Ftest运算与手算一致,与其他语言的计算结果幅值F,均值J一直,其他的数据也证明是可以正确运行的
%%%%存在的问题
%拼接后可能会损失拼接处数据,未知是否会对结果有偏差


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 版权所有 转载请注明原出处网址%

出来的结果图,参考

雨流计数法的matlab实现,采用三点法与四点法_第1张图片

四点法的实现

clear;clc
C=xlsread('load_F1');%%%%%%%%%在此修改加载的文件名,数据格式一直才可正确运算%%%
B=C;A=C;
q=length(A);
%四点循环计数法
%% 步骤一 %%
%对载荷时间历程进行处理使它只包含峰谷峰谷交替出现
m=q;
for i=2:1:m-1
    if A(i-1)A(i)&&A(i)>A(i+1)
        B(i)=NaN;
    end
end
B(isnan(B))=[];n=length(B);
%% 步骤二 %%
F=[];J=[];D=B;
while fun(B)==1||fun(B)==0
 if fun(B)==1
    for j=1:n-4
    s1=abs(B(j+1)-B(j+2));
    s0=abs(B(j+3)-B(j));
    e3=(B(j+2)+B(j+1))/2;
        if s1<=s0
            F=[F;s1];
            J=[J;e3];
            B(j+1)=[];
            B(j+1)=[];
            n=length(B);
            break
        else
            continue
        end
    end
 elseif fun(B)==0
     break
 end
 continue
end
%% 步骤三 %%
%画图像 三维hist三维图像
X=[J,F];
figure;hist3(X,[30 30]);
xlabel('均值');
title('雨流计数法-四点循环计数运算逻辑');
ylabel('幅值');
zlabel('循环次数');

出来的结果图

雨流计数法的matlab实现,采用三点法与四点法_第2张图片

其中应用的fun函数代码

function re=fun(B)
n=length(B);re=0;
for j=1:n-4
    s1=abs(B(j+1)-B(j+2));
    s0=abs(B(j+3)-B(j));
    if s1<=s0
        re=1;
        break
    else
        re=0;
        continue
    end
end
return 

以上就是所有的代码,下面提供源文件的下载地址,包括三个函数,一些测试用的数据,一份word版的手算结果与两者计算结果的简单情况下的对比。下载网址为https://download.csdn.net/download/u011391128/10286545,或者可以在我本人的上传文件中去找。要2个c币,我也不知道这是什么东西,选不了0就选的2。


希望能和各位业内人士交流一下如何改进,如果有人能加个gui的界面,万分感谢,我对gui不太熟,但你要把我的出处注上啊。最后,如果你是龙凯老师的学生,代我向他问好,顺便此题从此以后将不再成为题目。

你可能感兴趣的:(matlab实现,雨流计数法,matlab,疲劳,三点法)