【问题标题】:Classifying Symbolic Values and Symbolic Variables within a Symbolic Array对符号数组中的符号值和符号变量进行分类
【发布时间】:2017-03-20 21:57:00
【问题描述】:

我有一个“sym”类型的包含六个值(但它可以无限长)的向量。在这种情况下,向量具有数字和变量(所有类 sym)。

a=[0.6 ; x_1; 0; 0; x_2; 0]

我想编写一个算法来判断 a(1)=number、a(1)=zero 还是 a(1)=variable。

但如果x_1x_2 是符号变量,那么数组a 及其所有元素都会自动成为符号变量,即class(a(1)) 将返回'sym'(来自@horchler)。

【问题讨论】:

  • 那么,如果想写,为什么不写呢?请edit 提出您在minimal reproducible example 中尝试过的问题,并清楚地解释该代码的问题所在。Stack Overflow 不是代码编写服务。
  • @Adriaan 我在问一个我不知道答案的问题,可能有人有一个简单的解决方案。我知道它不是代码编写服务。但是我不知道如果我这样做了要编写的函数:如果 a(1)=='a symbol' 并将 x_2 与 0.6 区分开来,因为两者都是类 sym。
  • @SardarUsama:我想说为此使用正则表达式是“不好的方式”。
  • 非常感谢您抽出宝贵时间提供帮助 :)
  • 正则表达式在 Matlab 中很慢,符号变量/表达式是一个具有自己的方法的类,这些方法是使用它们的首选/安全方式。 The MathWorks 强烈反对在符号数学和字符串之间进行转换(请参阅许多符号数学文档页面顶部的注释,例如,here)。

标签: matlab symbols symbolic-math


【解决方案1】:

如果x_1x_2 是符号变量,那么数组a 和它的所有元素都会自动成为符号变量,即class(a(1)) 将返回'sym'。看起来您想确定一个元素是符号值还是符号表达式(由一个或多个符号变量组成)。您可以为此使用symvar。您需要使用 for 循环遍历您的数组以检查每个元素,例如:

syms x_1 x_2;
a = [0.6; x_1; 0; 0; x_2; 0];

for ai = vpa(a(:).')
    if isempty(symvar(ai))
        if ai == 0
            disp('Zero value');
        else
            disp('Non-zero value');
        end
    else
        disp('Symbolic expression or function');
    end
end

vpa 函数用于计算a 中可能简化为数值的任何表达式。如果您知道输入数组的样子,则可以删除 vpa。如果需要,您可以使用double 将符号值转换为浮点数。

【讨论】:

  • 谢谢@horchler,符号值和表达的区别是我真的不明白。这解决了我的疑问。感谢您的时间和帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-27
  • 1970-01-01
  • 2019-04-10
  • 1970-01-01
  • 2019-02-27
  • 2014-06-22
  • 2010-10-11
相关资源
最近更新 更多