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

📄 check_numeric.m

📁 基于Matlab的地震数据处理显示和测井数据显示于处理的小程序
💻 M
字号:
function [var,ier,handle]=check_numeric(str,var_name,varargin)% Check if string represents numeric variables and satisfies specified constraints% Written by: E. R.: August 21, 2004% Last updated: December 4, 2005: Bug fix in error message%%           [var,ier,handle]=check_numeric(str,var_name,varargin)% INPUT% str       string of numbers% var_name  name of the variable (for error messages)% varargin  one or more cell arrays; the first element of each cell array is%           a keyword, the other elements are parameters. Presently, keywords are:%           'minmax'  minimum and maximum number of entries%                  Default: not checked%           'bounds'  lower and upper bound of entries; not checked if bounds(1)=[]%                  Default: not checked%           'monotonic' monotonicity of numbers (if more than one). Possible %                  values are: %                  '<'    strictly monotonicly increasing%                  '<='   monotonicly increasing%                  '>='   monotonicly decreasing      %                  '>'    strictly monotonicly decreasing %                  []     not checked (default)%           'modulo'  two numbers "m1", and "m2": input must satify the condition %                     mod(input,m2)+m2 == 0%                     not checked if modulo == []%                     numbers are integers if {'modulo',1,0}%                                     even if {'modulo',2,0}%                                      odd if {'modulo',2,1}% OUTPUT% var       scalar or numeric vector % ier       Logical vector with 5 entries%           ier(1) == true    string is not numeric%           ier(2) == true    number of input parameters is not within limits%           ier(3) == true    input parameters are not within bounds%           ier(4) == true    input parameters do not satisfy monotonicity requirements%           ier(5) == true    input parameters do not satisfy the "modulo" requirement% handle    handle of message window (so it can be deleted)%% EXAMPLES%         [var,ier]=check_numeric('22','test_data',{'minmax',1 3})%         [var,ier]=check_numeric('22 23 24 35','test_data',{'minmax',1 3})%         [var,ier]=check_numeric('22 23','test_data',{'minmax',1 3},{'bounds',0 30}, ...%                   {'monotonic','>'},{'modulo',2,0})%         [var,ier]=check_numeric('22 23','frequencies',{'minmax',1 3},{'bounds',0 30}, ...%                   {'modulo',2,1})%keywords={'number')handle=[];ier=logical(zeros(1,5));var=str2num(str);   % String with numbers to be checkedif isempty(var)   msgdlg([var_name,' is not numeric.'])   ier(1)=logical(1);   returnendik=0;lvar=length(var);message=cell(10,1);for ii=1:length(varargin)   if ier(2)      break   end   temp=varargin{ii};                if ~isempty(temp{2})   switch temp{1}        % Check if the number of entries is correct   case 'minmax'       if length(temp) == 3         minno=temp{2};         maxno=temp{3};      else         try           minno=temp{2}(1);           maxno=temp{2}(2);         catch           minno=temp{2};           maxno=minno;         end      end      if lvar < minno  |  lvar > maxno         ier(2)=logical(1);         if minno < maxno            ik=ik+1;            message{ik}=['"',var_name,'" must be a vector with ',num2str(minno), ...                    ' to ',num2str(maxno),' entries.'];            handle=msgdlg(['"',var_name,'" must be a vector with ',num2str(minno), ...                    ' to ',num2str(maxno),' entries.']);            add_handle2delete(handle)         elseif temp{2} > 1            ik=ik+1;            message{ik}=['"',var_name,'" must be a vector with ',num2str(minno),' entries.'];%            handle=msgdlg(['"',var_name,'" must be a vector with ',num2str(minno),' entries.']);%           add_handle2delete(handle)         else            ik=ik+1;            message{ik}=['"',var_name,'" must be a scaler.'];%           handle=msgdlg(['"',var_name,'" must be a scaler.']);%           add_handle2delete(handle)         end      end%       Check if the entries are within bounds   case 'bounds'      if ~isempty(temp(2))         if length(temp) == 3            minno=temp{2};            maxno=temp{3};         else            minno=temp{2}(1);            maxno=temp{2}(2);         end         minvar=min(var(:));         maxvar=max(var(:));         if minvar < minno  |  maxvar > maxno            ier(3)=logical(1);            ik=ik+1;            message{ik}=['Entries of "',var_name,'" must be a between ',num2str(minno), ...                    ' and ',num2str(maxno)];%            handle=msgdlg(['"',var_name,'" must be between ',num2str(minno), ...%                   ' and ',num2str(maxno)]);%            add_handle2delete(handle)         end      end%       Check if entries are monotonic   case 'monotonic'      mtype=temp{2};      if lvar > 1  &  ~isempty(mtype)         test=diff(var(:));         if strcmp(mtype,'<')            if any(test <= 0)               ik=ik+1;               message{ik}=['Entries of "',var_name,'" must be strictly increasing.'];%              handle=msgdlg(['Entries of vector "',var_name,'" must be strictly increasing.']);%              add_handle2delete(handle)                              ier(4)=logical(1);            end         elseif strcmp(mtype,'<=')            if any(test < 0)               ik=ik+1;               message{ik}=['Entries of "',var_name,'" must be non-decreasing.'];%              handle=msgdlg(['Entries of vector "',var_name,'" must be non-decreasing.']);%              add_handle2delete(handle)               ier(4)=logical(1);            end         elseif strcmp(mtype,'>=')            if any(test > 0)               ik=ik+1;               message{ik}=['Entries of "',var_name,'" must be non-increasing.'];%              handle=msgdlg(['Entries of vector "',var_name,'" must be non-increasing.']);%              add_handle2delete(handle)               ier(4)=logical(1);            end         elseif strcmp(mtype,'>')            if any(test >= 0)               ik=ik+1;               message{ik}=['Entries of "',var_name,'" must be strictly decreasing.'];%              handle=msgdlg(['Entries of vector "',var_name,'" must be strictly decreasing.']);%              add_handle2delete(handle)               ier(4)=logical(1);            end         else            handle=msgdlg(['Unknown option: ',mtype]);            add_handle2delete(handle)         end      end    case 'modulo'      if length(temp) == 3         modul=temp{2};         remain=temp{3};      else         modul=temp{2}(1);         remain=temp{2}(2);      end      bool=(mod(var,modul) ~= remain);      if any(bool)%         var=round(var/modul)*modul+remain;         ier(5)=logical(1);         if modul == 1   &   remain == 0            ik=ik+1;            message{ik}=['Entries of "',var_name,'" must be integer.'];%           handle=msgdlg(['Entries of "',var_name,'" must be integer.']);%           add_handle2delete(handle)         elseif modul == 2   &   remain == 0            ik=ik+1;            message{ik}=['Entries of "',var_name,'" must be even.'];%            handle=msgdlg(['Entries of "',var_name,'" must be even.']);%           add_handle2delete(handle)         elseif modul == 2   &   remain == 1            ik=ik+1;            message{ik}=['Entries of "',var_name,'" must be odd.'];%            handle=msgdlg(['Entries of "',var_name,'" must be odd.']);%           add_handle2delete(handle)         elseif remain  == 0            ik=ik+1;           message{ik}=['Entries of "',var_name,'" must be an integer multiples of ' ...                      ,num2str(modul),'.'];%            handle=msgdlg(['Entries of "',var_name,'" must be integer multiples of ' ...%                       ,num2str(modul),'.']);%            add_handle2delete(handle)         else            ik=ik+1;            message{ik}=['Entries of "',var_name,'" must be integer multiples of ' ...                     ,num2str(modul),' incemented by ',num2str(remain),'.'];%           handle=msgdlg(['Entries of "',var_name,'" must be integer multiples of ' ...%                    ,num2str(modul),' incemented by ',num2str(remain),'.']);%           add_handle2delete(handle)         end      end   otherwise      warndlg(['Unrecognized constraint "',temp{1},'"'])      end                end   end     if ik > 0   handle=warndlg(message(1:ik));   add_handle2delete(handle);end

⌨️ 快捷键说明

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