mustBeInRange with multiple conditions
8 ビュー (過去 30 日間)
古いコメントを表示
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 件のコメント
採用された回答
Dyuman Joshi
2023 年 4 月 27 日
編集済み: Dyuman Joshi
2023 年 4 月 27 日
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 件のコメント
Dyuman Joshi
2023 年 4 月 27 日
編集済み: Dyuman Joshi
2023 年 4 月 27 日
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
2023 年 4 月 27 日
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
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Introduction to Installation and Licensing についてさらに検索
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!