Matlab 符号函数替换
Matlab symbolic function susbstitution
我正在定义一个符号函数
syms x(n);
x(n) = (n==0);
n=-1:1;
当我尝试时 x(n)+x(n-1)
我得到
[ -1 == 0, 0 == 0, 1 == 0]
+[ -2 == 0, -1 == 0, 0 == 0]
=[ -3 == 0, -1 == 0, 1 == 0]
我想强制符号函数替换值,所以我得到以下结果。
[ 0, 1, 0]
+[ 0, 0, 1]
=[ 0, 1, 1]
我尝试了 x(n) = logical(n==0);
和 x(n) = double(n==0);
之类的方法,但得到了相同的结果。
我知道 double(x(n))+double(x(n-1))
有效,但我想直接使用 x(n)
并在符号函数的定义中进行替换。
这能做到吗?
我认为 piecewise
是在 Mupad 中将布尔值转换为整数的唯一方法。不幸的是,它只在 Mupad 本身可用,所以你必须使用 evalin
来获取它:
syms asinteger(fun) x(n)
asinteger(fun) = evalin(symengine,'piecewise([fun,1],[Otherwise,0])');
x(n) = asinteger(n==0);
n=-1:1;
>> x(n)+x(n-1)
ans =
[ 0, 1, 1]
将 asinteger
函数视为 double
或 int64
的符号版本。
我认为最简单的方法是使用 isAlways
,它会计算表达式(相等或不等)是否为真:
syms x(n);
x(n) = (n==0);
m = -1:1; % Use a different variable to not overwrite symbolic n
isAlways(x(m))+isAlways(x(m-1))
或者您可以使用匿名函数来避免多次调用 isAlways
:
m = -1:1;
x = @(n)isAlways(sym(n)==0);
x(m)+x(m-1)
这两个 return 双精度数组 ([0 1 1]
)。您可以使用 logical
to convert this to a logical array. You might also find sym/isequaln
在某些情况下很有用。
我正在定义一个符号函数
syms x(n);
x(n) = (n==0);
n=-1:1;
当我尝试时 x(n)+x(n-1)
我得到
[ -1 == 0, 0 == 0, 1 == 0]
+[ -2 == 0, -1 == 0, 0 == 0]
=[ -3 == 0, -1 == 0, 1 == 0]
我想强制符号函数替换值,所以我得到以下结果。
[ 0, 1, 0]
+[ 0, 0, 1]
=[ 0, 1, 1]
我尝试了 x(n) = logical(n==0);
和 x(n) = double(n==0);
之类的方法,但得到了相同的结果。
我知道 double(x(n))+double(x(n-1))
有效,但我想直接使用 x(n)
并在符号函数的定义中进行替换。
这能做到吗?
我认为 piecewise
是在 Mupad 中将布尔值转换为整数的唯一方法。不幸的是,它只在 Mupad 本身可用,所以你必须使用 evalin
来获取它:
syms asinteger(fun) x(n)
asinteger(fun) = evalin(symengine,'piecewise([fun,1],[Otherwise,0])');
x(n) = asinteger(n==0);
n=-1:1;
>> x(n)+x(n-1)
ans =
[ 0, 1, 1]
将 asinteger
函数视为 double
或 int64
的符号版本。
我认为最简单的方法是使用 isAlways
,它会计算表达式(相等或不等)是否为真:
syms x(n);
x(n) = (n==0);
m = -1:1; % Use a different variable to not overwrite symbolic n
isAlways(x(m))+isAlways(x(m-1))
或者您可以使用匿名函数来避免多次调用 isAlways
:
m = -1:1;
x = @(n)isAlways(sym(n)==0);
x(m)+x(m-1)
这两个 return 双精度数组 ([0 1 1]
)。您可以使用 logical
to convert this to a logical array. You might also find sym/isequaln
在某些情况下很有用。