# Function Argument Validation, Compare to Irrational Number or Expression

7 views (last 30 days)
Toder on 28 Apr 2020
Commented: Adam Danz on 29 Apr 2020
Is there a way to use MATLAB's built-in validation functions to compare an argument to an expression or funciton output?
I want to do the following:
function out = myfun(x)
arguments
x (1,1) double {mustBeGreaterThan(x,pi)}
end
out = foo;
end
Since pi is a function, which is not allowed in the native validation functions, the above code throws an error. Instead I have to define a custom validation function to compare the argument to pi.
function out = myfun(x)
arguments
x (1,1) double {mustBeGreaterThanPi(x)}
end
out = foo;
end
function mustBeGreaterThanPi(x)
if x <= pi
error('Value must be greater than pi.')
end
end
The validation block cannot pass pi to the custom validation function, so pi must be built into the function. This is a complete pain in the neck if we want to compare, say, ten arguments to ten different irrationals, repeating decimals, or simple expressions; we must define ten custom validation functions, unless we get creative with passing scalars or strings (we could pass c to the validation function where an error is thrown if value <= c*pi, for example).

Adam Danz on 28 Apr 2020
Edited: Adam Danz on 29 Apr 2020
One solution would be to replace the pi function with a literal;
arguments
x (1,1) double {mustBeGreaterThan(x,3.1415926535897932384626)}
end
or you could use a different form of validation,
function out = jff(x)
assert(x>pi, 'x must be greater than pi')
out = x*2;
end
function out = jff(x)
validateattributes(x,{'double'},{'scalar','>',pi})
out = x*2;
end
Adam Danz on 29 Apr 2020
Just an FYI, you can see when a function was first released at the bottom of the documentation page.

R2019b

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!