在符号数组中对符号值和符号变量进行分类

时间:2017-03-20 21:57:01

标签: matlab symbols symbolic-math

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

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

我想写一个算法,可以判断(1)=数字,a(1)= 0或a(1)=变量。

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

1 个答案:

答案 0 :(得分:2)

如果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将符号值转换为浮点值。