2

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

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创建一个总是返回零的函数,但是有更漂亮的方法吗?

4

2 回答 2

1

实际上,没有办法。

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

它变得更好了。 sym()内部做了一些简化,所以sym('0*x')sym('x-x')两者都成为sym('0'),你得到完全相同的行为。同样,sym('x/x')变成并且即使您将sym('1')标量 1传递给向量,您也只会从中获取。subs()

解决此问题的唯一方法是编写一个辅助函数,该函数检测size()来自的输出subs()是否小于向量,并在需要时将其转换为正确大小的向量。

于 2010-06-06T18:25:25.030 回答
-1

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

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

反对

f=sym('0');

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

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

是你需要的吗?

于 2010-06-05T23:33:28.127 回答