ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Matlab中assert函数的使用

2021-12-06 09:05:36  阅读:256  来源: 互联网

标签:false 函数 错误 assert cond Matlab msg MATLAB


目录

语法

说明

示例

值在预期范围之内

期望的数据类型

预期的代码执行情况


        assert是条件为 false 时引发错误。

语法

assert(cond)
assert(cond,msg)
assert(cond,msg,A1,...,An)
assert(cond,errID,msg)
assert(cond,errID,msg,A1,...,An)

​        断言条件,指定为有效的 MATLAB 表达式。如果 cond 为 false,assert 函数会引发错误。cond 可以包含关系运算符(例如 < 或 ==)和逻辑运算符(例如 &&、|| 或 ~)。使用逻辑运算符 and 和 or 创建复合表达式。MATLAB 按照运算符优先级规则从左至右计算复合表达式。

注意

        如果希望 MATLAB 转换错误消息中的特殊字符(例如 \t、\n、%s 和 %d),必须为 assert 指定多个输入参数。数值、字符或字符串数组。此输入参数提供与 msg 中的转换设定符相对应的值,用来替换这些转换设定符。

提示

  • 引发错误时,MATLAB 会捕获该错误的相关信息并将其存储在用作 MException 类的对象的数据结构体中。可以使用try/catch来访问异常对象中的信息。或者,如果程序由于异常而终止,并将控制权返回至命令提示符,则可以使用 MException.last

  • 如果断言失败发生在try块内,则 MATLAB 不会停止执行该程序。在本例中,MATLAB 将控件传递到catch块中。

说明

如果 cond 为 false,assert(cond) 会引发错误。

如果 cond 为 false,assert(cond,msg) 会引发错误并显示错误消息 msg。

​如果 cond 为 false,assert(cond,msg,A1,...,An) 会显示一条错误消息,其中包含格式设置转换字符,例如与 MATLAB® sprintf 函数一起使用的字符。msg 中的每个转换字符都会转换为 A1,...,An 中的一个值。

​如果cond 为 false,assert(cond,errID,msg) 会抛出错误并显示错误消息 msg,还会包含一个标示此异常的错误标识符。此标识符可用于区分错误,它还允许您控制在 MATLAB 遇到错误时系统做何反应。

assert(cond,errID,msg,A1,...,An) 会显示格式化的错误消息,还会包含标示异常的错误标识符。

示例

值在预期范围之内

        断言值 x 大于指定的最小值。

minVal = 7;
x = 26;

assert(minVal < x)

        表达式的计算结果为 true,断言通过。断言 x 的值介于指定的最小值和最大值之间。

maxVal = 13;

assert((minVal < x) && (x < maxVal))
Assertion failed.

        表达式的计算结果为 false。断言失败,MATLAB 引发错误。

期望的数据类型

        断言两个数字的乘积为双精度值。

a = 13;
b = single(42);
c = a*b;

assert(isa(c,'double'),'Product is not type double.')
Product is not type double.

        增强错误消息以便显示c的数据类型。

assert(isa(c,'double'),'Product is type %s, not double.',class(c))
Product is type single, not double.

预期的代码执行情况

        使用assert函数测试在正常的代码执行情况下不应出现的情况。如果系数为数值,计算的根也应为数值。使用指定系数和计算根的二次方程计算结果应为零。

function x = quadraticSolver(C)

validateattributes(C,{'numeric'},{'size',[1 3]})

a = C(1);
b = C(2);
c = C(3);

x(1) = (-b+sqrt(b^2-4*a*c))/(2*a);
x(2) = (-b-sqrt(b^2-4*a*c))/(2*a);
assert(isnumeric(x),'quadraticSolver:nonnumericRoots',...
    'Computed roots are not numeric')

y1 = a*x(1)^2+b*x(1)+c;
y2 = a*x(2)^2+b*x(2)+c;
assert(y1 == 0,'quadraticSolver:root1Error','Error in first root')
assert(isequal(y2,0),'quadraticSolver:root2Error','Error in second root')

end

标签:false,函数,错误,assert,cond,Matlab,msg,MATLAB
来源: https://blog.csdn.net/jk_101/article/details/111032630

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有