mustBeInRange with multiple conditions
    8 visualizzazioni (ultimi 30 giorni)
  
       Mostra commenti meno recenti
    
    Joy Shen
 il 27 Apr 2023
  
    
    
    
    
    Modificato: Les Beckham
      
 il 27 Apr 2023
            Hi all,
I need to ensure a value is within a range. I understand there's a function called mustBeInRange, but I need to check for multiple conditions. I'd ideally like a message to spit out a specific error that says something like "error, value is not within the range for the third case." I wrote the following but it says that I have too many arguments in mustBeInRange, but it individually works when I put the mustBeInRange line in the command window.
    n_roof = 10;
    int_H = [10 13 6]; % Case 1, case 2, case 3
    n_floor = n_roof - int_H;
    n_ins = -1; %Setting it to test the mustBeInRange function
    if     mustBeInRange(n_ins,n_floor(1),n_roof)
    else disp('error, installation height is below floor or above roof elevation for case 1')
        if mustBeInRange(n_ins,n_floor(2),n_roof)
        else disp('error, installation height is below floor or above roof elevation for case 2')
             if mustBeInRange(n_ins,n_floor(3),n_roof)
             else disp('error, installation height is below floor or above roof elevation for case 3')
             end
        end 
    end 
0 Commenti
Risposta accettata
  Dyuman Joshi
      
      
 il 27 Apr 2023
        
      Modificato: Dyuman Joshi
      
      
 il 27 Apr 2023
  
      The function mustBeInRange itself throws an error if the value is not inside the range
n_roof = 10;
int_H = [10 13 6]; % Case 1, case 2, case 3
n_floor = n_roof - int_H;
n_ins = -1; %Setting it to test the mustBeInRange function
mustBeInRange(n_ins,n_floor(1),n_roof)
%For some reason, I am unable to run the code in live editor here
%Edit - I have attached a ss of the code run on MATLAB App, where you can
%see the error mustBeInRange() throws
If you want to show a specific/particular message for each condition, you will have to use logical operators.
%Define a function handle to use for each case
fun = @(val, in1, in2) (val >= min(in1,in2)) && (val <= max(in1,in2)) ;
if  ~fun(n_ins,n_floor(1),n_roof)
    disp('error, installation height is below floor or above roof elevation for case 1')
    if ~fun(n_ins,n_floor(2),n_roof)
    disp('error, installation height is below floor or above roof elevation for case 2')
        if ~fun(n_ins,n_floor(3),n_roof)
            disp('error, installation height is below floor or above roof elevation for case 3')
        end
    end
end
5 Commenti
  Dyuman Joshi
      
      
 il 27 Apr 2023
				
      Modificato: Dyuman Joshi
      
      
 il 27 Apr 2023
  
			You can directly use NaN as input to the function handle or assign n_ins as NaN. But note that the function handle will return 0 with NaN irrespective of the limits.
%Direct
if  ~fun(NaN,n_floor(1),n_roof)
%Assign n_ins
n_ins = NaN;
if  ~fun(n_ins,n_floor(1),n_roof)
"I want to also be able to stop the code for the particular case if the conditions aren't met"
So, if conditions for case 1 isn't met, what should the code do next? Display the error and don't check the rest of the conditions?
  Walter Roberson
      
      
 il 27 Apr 2023
				However you do not want to emit any message if it fits one of the cases. So
m(1) = fun(n_ins,n_floor(1),n_roof)
m(2) = etc
if ~any(m)
  use the m values to figure out the error message 
end
Più risposte (0)
Vedere anche
Categorie
				Scopri di più su Introduction to Installation and Licensing in Help Center e File Exchange
			
	Prodotti
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!



