通常,符号函数返回向量输入的向量:
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的函数,但是有更漂亮的方法吗?
答案 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;
你需要什么?