数学建模社区-数学中国

标题: MATLAB处理简单的日期字符串 [打印本页]

作者: jxb4137    时间: 2017-7-6 09:18
标题: MATLAB处理简单的日期字符串
  1. % CUMCM2012C
  2. % Author ID:jxb4137
  3. function dv = isdate( str )
  4. % Input date string,returns the year, month, and day vectors.
  5.     if regexp(str,'20\d{2}/\d{1,2}/\d{1,2}') == 1 % Distinguish yyyy/mm/dd HH:MM:SS or yyyy/mm/dd
  6.         vec = regexp(str,' ','split');
  7.         vec = regexp(vec{1,1},'/','split'); % Process
  8.         dv = str2num(char(vec))'; % Output date vector
  9.     else
  10.         if regexp(str,'20\d{2}\-\d{1,2}\-\d{1,2}') == 1 % yyyy-mm-dd
  11.         vec =  regexp(str,'-','split');
  12.         dv = str2num(char(vec))';
  13.     else
  14.         if regexp(str,'\d{1,2}/\d{1,2}/20\d{2}') == 1 % dd/mm/yyyy
  15.         vec =  regexp(str,'/','split');
  16.         dv = fliplr(str2num(char(vec)))';
  17.         else
  18.             if regexp(str,'\d{1,2}\-\d{1,2}\-20\d{2}') == 1 % dd-mm-yyyy
  19.                 vec =  regexp(str,'-','split');
  20.                 dv = fliplr(str2num(char(vec)))';
  21.                 else
  22.                     if regexp(str,'\d{8}') == 1 % yyyymmdd
  23.                         vec =  [str(1:4),str(5:6),str(7:8)];
  24.                         dv = str2num(char(vec))';
  25.                     else
  26.                         dv = NaN;
  27.                     end
  28.                 end
  29.             end
  30.         end
  31.     end
  32. end
复制代码


作者: jxb4137    时间: 2017-7-7 20:32
  1. % Author ID:jxb4137
  2. function [matrix] = perm(vec,num)
  3.     comb_vec = nchoosek(vec,num);
  4.     matrix = [];
  5.     for i = 1:size(comb_vec,1)
  6.         comb_vec_perm = perms(comb_vec(i,:));
  7.         for j = 1:size(comb_vec_perm,1)
  8.             matrix = [matrix;comb_vec_perm(j,:)];
  9.         end
  10.     end
  11. end
复制代码


作者: jxb4137    时间: 2017-7-7 20:34
  1. % Author ID:jxb4137
  2. function [MST] = kruskal(G)
  3.     [r c v] = find(G);
  4.     RCV = [r c v];
  5.     index = RCV(:,1:2);
  6.     n = size(G,1);
  7.     MST = [];                             %最小生成树(MST = [u v w])记为一个三列的矩阵
  8.     while size(MST,1) < n-1
  9.         temp = min(RCV(:,3));
  10.         flag = find(RCV(:,3) == temp);
  11.         flag = flag(1);
  12.         i = RCV(flag,1);
  13.         j = RCV(flag,2);
  14.         if index(flag,1) ~= index(flag,2)
  15.             MST = [MST;RCV(flag,:)];
  16.         end
  17.         index(find(index == j)) = i;
  18.         RCV(flag,:) = [];
  19.         index(flag,:) = [];
  20.     end
  21. end
复制代码


作者: jxb4137    时间: 2017-7-7 20:35
  1. % Author ID:jxb4137
  2. function [D,path] = floyd(D)
  3.     n = length(D);
  4.     for i = 1:n
  5.         for j = 1:n
  6.             if i ~= j && D(i,j) == 0
  7.                 D(i,j) = inf;
  8.             end
  9.         end
  10.     end
  11.     path = zeros(n);
  12.     for k = 1:n
  13. %         D = min(D,bsxfun(@plus,D(k,:),D(:,k)));% 调用内置匿名函数 外加,可以提高运算速度
  14.         for i = 1:n
  15.             for j = 1:n
  16.                 if  D(i,j) > D(i,k) + D(k,j)
  17.                     D(i,j) = D(i,k) + D(k,j);
  18.                     path(i,j) = k;
  19.                 end
  20.             end
  21.         end
  22.     end
  23. end
复制代码






欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5