符号和数字输入的编写函数
Writing function for symbolic and numeric input
我正在编写一个(相当大的)纯函数,它将接受数字和符号输入。我面临的问题(主要)是将符号表达式转换为逻辑表达式。例如,当我有一个表达式 syms x; assume( x, 'positive' );
和一个测试 if( x>0 ); ...
时,Matlab 会抛出一个错误;或者:
Conversion to logical from sym is not possible.
或
Unable to prove 'x > 0' literally. Use 'isAlways' to test the statement mathematically.
视情况而定。
到目前为止,我通过将所有 if
重写为 if( isAlways(x>0) ); ...
并在文件夹 @double
中添加一个函数 isAlways
来解决这个问题,以便 Matlab 使用这个函数遇到 double
.
这种方法的缺点是,我也必须为每个其他类型编写一个 isAlways
函数(single
、int8
、...)(以及函数 simplify
,...).
我的另一种方法是,在全局命名空间中编写一个函数isAlways
,并在遇到sym
时调用内置函数isAlways
。但是,isAlways
似乎不是内置的,因为 Matlab 报告
>> builtin('isAlways',sym(1));
Error using builtin
Cannot find builtin function 'isAlways'
对于如何以更优雅的方式或至少另一种方式解决此问题,您有什么想法吗?
编辑:我不想过多更改我的函数代码,尤其是不想添加 switch class(x)
之类的检查;案例sym
; ... case double
;...`,但向 Matlab 添加“功能”,使其对大多数功能开箱即用。
- 在大约 R2018 的 Matlab 版本中,我最终在文件夹
@double
等中定义了一个函数 isAlways
- 不幸的是,行为在 Matlab R2020 前后发生了变化。现在不可能再以可靠的方式向 类 添加函数。因此,我现在在全局命名空间中定义了一个函数
isAlways
,它会为每个没有重载的类型调用。
这不是完美的解决方案,但至少有效。
我正在编写一个(相当大的)纯函数,它将接受数字和符号输入。我面临的问题(主要)是将符号表达式转换为逻辑表达式。例如,当我有一个表达式 syms x; assume( x, 'positive' );
和一个测试 if( x>0 ); ...
时,Matlab 会抛出一个错误;或者:
Conversion to logical from sym is not possible.
或
Unable to prove 'x > 0' literally. Use 'isAlways' to test the statement mathematically.
视情况而定。
到目前为止,我通过将所有 if
重写为 if( isAlways(x>0) ); ...
并在文件夹 @double
中添加一个函数 isAlways
来解决这个问题,以便 Matlab 使用这个函数遇到 double
.
这种方法的缺点是,我也必须为每个其他类型编写一个 isAlways
函数(single
、int8
、...)(以及函数 simplify
,...).
我的另一种方法是,在全局命名空间中编写一个函数isAlways
,并在遇到sym
时调用内置函数isAlways
。但是,isAlways
似乎不是内置的,因为 Matlab 报告
>> builtin('isAlways',sym(1));
Error using builtin
Cannot find builtin function 'isAlways'
对于如何以更优雅的方式或至少另一种方式解决此问题,您有什么想法吗?
编辑:我不想过多更改我的函数代码,尤其是不想添加 switch class(x)
之类的检查;案例sym
; ... case double
;...`,但向 Matlab 添加“功能”,使其对大多数功能开箱即用。
- 在大约 R2018 的 Matlab 版本中,我最终在文件夹
@double
等中定义了一个函数isAlways
- 不幸的是,行为在 Matlab R2020 前后发生了变化。现在不可能再以可靠的方式向 类 添加函数。因此,我现在在全局命名空间中定义了一个函数
isAlways
,它会为每个没有重载的类型调用。 这不是完美的解决方案,但至少有效。