⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rfmatrix.m

📁 matlab雨流算法。The rain flow algorithm code has been prepared according to the ASTM standard (Standard p
💻 M
字号:
function [m,mx,my]=rfmatrix(rf,x,y,flagx,flagy)
% rfmatrix - rain flow matrix estimation
% 
% function [m,mx,my] = rfmatrix(rf,x,y,flagx,flagy)
% 
% Syntax: rfmatrix(rf)
%         rfmatrix(rf,x,y)
%         rfmatrix(rf,x,y,flagx,flagy)
%         [m,mx,my] = rfmatrix(...)
% 
% Input: rf          - rainflow data from rainflow function,
%        x,y         - numbers of bins in x and y direction,
%        flagx,flagy - strings,
%                      'ampl' for amplitude,
%                      'mean' for mean value,
%                      'freq' for frequency and 'period' for
%                      time period of extracted cycles.
%
% Output: m     - rainflow matrix,
%         mx,my - the bin locations respectively to x and y.

% By Adam Nies硂ny, 16-Aug-2003
% ajn@po.opole.pl




error(nargchk(1,5,nargin))
if nargin<5,
   flagy='mean';
   if nargin<4,
      flagx='ampl';
      if nargin<3,
         y=10;
         if nargin<2,
            x=10;
         end
      end
   end
end

% rainflow data
if flagx(1)=='m',
   xdata=rf(2,:);
elseif flagx(1)=='f',
   xdata=rf(5,:).^-1;
elseif flagx(1)=='p',
   xdata=rf(5,:);
else
   xdata=rf(1,:);
end

if flagy(1)=='m',
   ydata=rf(2,:);
elseif flagy(1)=='f',
   ydata=rf(5,:).^-1;
elseif flagy(1)=='p',
   ydata=rf(5,:);
else
   ydata=rf(1,:);
end
cdata=rf(3,:);

x=x(:)';
y=y(:)';

if length(x) == 1
   minx = min(xdata);
   maxx = max(xdata);
   binwidth = (maxx - minx) ./ x;
   xx = minx + binwidth*(0:x);
   xx(length(xx)) = maxx;
   x = xx(1:length(xx)-1) + binwidth/2;
else
   xx = x;
   minx = min(xdata);
   maxx = max(xdata);
   binwidth = [diff(xx) 0];
   xx = [xx(1)-binwidth(1)/2 xx+binwidth/2];
   %xx(1) = minx;
   %xx(length(xx)) = maxx;
end

if length(y) == 1
   miny = min(ydata);
   maxy = max(ydata);
   binwidth = (maxy - miny) ./ y;
   yy = miny + binwidth*(0:y);
   yy(length(yy)) = maxy;
   y = yy(1:length(yy)-1) + binwidth/2;
else
   yy = y;
   miny = min(ydata);
   maxy = max(ydata);
   binwidth = [diff(yy) 0];
   yy = [yy(1)-binwidth(1)/2 yy+binwidth/2];
   %yy(1) = miny;
   %yy(length(yy)) = maxy;
end
% x, y - 渞odki przedzia丑w,
% xx, yy - przedzia硑, o jeden wi阠ej jak 渞odk體

srf=zeros(length(y),length(x));
rf=[xdata; ydata; cdata];

rfk=find(ydata>=yy(1) & ydata<=yy(2));
if ~isempty(rfk),
   srf(1,:)=rfhist(rf(:,rfk),x,'ampl');
end

for k=2:length(y),
   rfk=find(ydata>yy(k) & ydata<=yy(k+1));   
   if ~isempty(rfk),
      srf(k,:)=rfhist(rf(:,rfk),x,'ampl');
   end
end

if nargout==0,
   h=bar3(y,srf,1);
   for i=1:length(h)
      c=repmat(srf(:,i)',4*6,1);
      c=reshape(c,4,6*length(y))';
      set(h(i),'CData',c)
      c=get(h(i),'XData');
      set(h(i),'XData',(max(x)-min(x))/(length(x)-1)*(c-1)+min(x))
   end
   set(gca,'XTickMode','auto')
   grid on
   xlabel(['X - ' flagx])
   ylabel(['Y - ' flagy])   
   zlabel('number of cycles')
   title('Rain Flow Matrix')
   axis tight
elseif nargout==1
   m=srf;
elseif nargout==2
   m=srf;
   mx=x;
elseif nargout==3
   m=srf;
   mx=x;   
   my=y;
end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -