MATLAB可以用rainflow来计算疲劳,但有限元计算得出的应力时序通常都可以保存成矩阵的形式,行是应力的时序,列是单元号。
如果单独用rainflow计算就只能用循环的形式,这样即显得复杂速度也慢。所以可以用一个子程序直接用矩阵计算。以下代码就是调用矩阵雨流计算法。
%应用雨流函数rainflowCountingOnRows求疲劳循环次数和对应循环的幅值
[cycles, averageAmplitudes] = rainflowCountingOnRows(loadData) ;
%cycles为循环次数,averageAmplitudes为平均幅值loadData为应力矩阵
以下代码就是矩阵雨流计算法子程序。
function [cycles, meanAmplitudes] = rainflowCountingOnRows(loadData)
% 初始化输出变量
cycles = zeros(size(loadData, 1), 1);
meanAmplitudes = zeros(size(loadData, 1), 1);
% 遍历每个载荷历程
for i = 1:size(loadData, 1)
loadPath = loadData(i, :);
[c, ~, ~, ~] = rainflow(loadPath);
% 计算循环次数
cycle_counts = c(:, 1);
% 计算平均波幅
average_amplitude = mean(c(:, 2));
cycleCount = sum(cycle_counts);
meanAmplitude = average_amplitude;
cycles(i) = cycleCount;
meanAmplitudes(i) = meanAmplitude;
end
end
这样就用子程序计算矩阵的方法代替了循环计算。