matlab:subs on symbolic constant返回标量而不是向量输入的向量

时间:2010-06-05 23:26:11

标签: matlab symbolic-math

通常,符号函数返回向量输入的向量:

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那样做一些丑陋的事情来创建一个总是返回0的函数,但是有更漂亮的方法吗?

2 个答案:

答案 0 :(得分:1)

实际上,没有办法。

sym('0')创建一个符号常量(在本例中为0)。 subs()将所有变量替换为给定向量中的每个值。但是,您没有变量,因此subs()只返回给定的符号常量。

变得更好。 sym()在内部进行了一些简化,因此sym('0*x')sym('x-x')都变为sym('0'),您会得到完全相同的行为。同样地,sym('x/x')变成sym('1'),你只需从subs()返回标量1,即使你传递了一个向量。

你要解决这个问题的唯一方法是编写一个辅助函数来检测来自size()的{​​{1}}输出是否小于向量,并将其转换为正确的如果需要,矢量的大小。

答案 1 :(得分:-1)

我没有符号工具箱所以这是一个盲目的猜测。您的函数声明看起来不够完整:

syms('x');
f=x*2;

针对

f=sym('0');

也许你在第一种情况下所做的是定义一个返回其输入的double的函数,在第二种情况下定义了一个函数,无论其输入如何都返回0。也许

syms('x');
f=x*0;

你需要什么?