符号和数字输入的编写函数

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 函数(singleint8、...)(以及函数 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 添加“功能”,使其对大多数功能开箱即用。

  1. 在大约 R2018 的 Matlab 版本中,我最终在文件夹 @double 等中定义了一个函数 isAlways
  2. 不幸的是,行为在 Matlab R2020 前后发生了变化。现在不可能再以可靠的方式向 类 添加函数。因此,我现在在全局命名空间中定义了一个函数 isAlways,它会为每个没有重载的类型调用。 这不是完美的解决方案,但至少有效。