通常,符号函数返回向量输入的向量:
syms('x');
f=x*2;
subs(f,[1 2 3])
outputs: [2 4 6]
但做
f=sym('0');
subs(f,[1 2 3]);
outputs: 0
and not: [0 0 0]
所以基本上,我的问题是如何使f
行为成为“正常”的符号函数。我可以做一些丑陋的事情,比如f=x-x
创建一个总是返回零的函数,但是有更漂亮的方法吗?
通常,符号函数返回向量输入的向量:
syms('x');
f=x*2;
subs(f,[1 2 3])
outputs: [2 4 6]
但做
f=sym('0');
subs(f,[1 2 3]);
outputs: 0
and not: [0 0 0]
所以基本上,我的问题是如何使f
行为成为“正常”的符号函数。我可以做一些丑陋的事情,比如f=x-x
创建一个总是返回零的函数,但是有更漂亮的方法吗?
实际上,没有办法。
sym('0')
创建一个符号常量(在本例中为 0)。 用给定向量中的每个值subs()
替换所有变量。但是,您没有变量,因此subs()
只返回给定的符号常量。
它变得更好了。 sym()
内部做了一些简化,所以sym('0*x')
或sym('x-x')
两者都成为sym('0')
,你得到完全相同的行为。同样,sym('x/x')
变成并且即使您将sym('1')
标量 1传递给向量,您也只会从中获取。subs()
解决此问题的唯一方法是编写一个辅助函数,该函数检测size()
来自的输出subs()
是否小于向量,并在需要时将其转换为正确大小的向量。
我没有符号工具箱,所以这是一个盲目的猜测。您的函数声明看起来不够相同:
syms('x');
f=x*2;
反对
f=sym('0');
也许您在第一种情况下所做的是定义一个返回其输入的双倍的函数,在第二种情况下定义一个无论其输入如何都返回 0 的函数。也许
syms('x');
f=x*0;
是你需要的吗?