Function Argument Validation, Compare to Irrational Number or Expression
조회 수: 2 (최근 30일)
이전 댓글 표시
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).
댓글 수: 0
채택된 답변
Adam Danz
2020년 4월 28일
편집: Adam Danz
2020년 4월 29일
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
댓글 수: 4
Adam Danz
2020년 4월 29일
Just an FYI, you can see when a function was first released at the bottom of the documentation page.
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Database Toolbox에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!