在Matlab转义为syms参数

时间:2015-12-22 14:53:29

标签: matlab symbolic-math

我有一个等式:w = (t-x0)*(t-x1)。我想用conv函数(conv((t-x0),(t-x1)))来解决它,但它的参数是tx0x1的syms。我收到错误

  

未定义函数'conv2'表示'sym'类型的输入参数。

如何解决错误?我也希望结果是多项式,因为我应该与polyint集成。

例如:

w = (t-x0)*(t-x1) --> w = t^2 - t*(x0+x1) + x0*x1 --> w=[ 1   -x0-x1   x0*x1 ]

polyint(w) -->  w= t^3/3 -t^2/2*(x0+x1) + t*x0*x1 --> w=[ 1/3  -1/2*(x0+x1)  x0*x1  0 ]

2 个答案:

答案 0 :(得分:2)

我认为Matlab还没有符号卷积的默认函数(虽然Moler先生提供了一个垫片here),但在这个例子中这并不是什么大问题,因为它是mentioned :“如果[输入]是多项式系数的向量,则对它们进行卷积相当于将两个多项式相乘。”所以我们可以使用直线乘法。

>> syms t x0 x1
>> w = (t-x0)*(t-x1);
>> p = fliplr(coeffs(w,t))
    p =
    [ 1, - x0 - x1, x0*x1]
>> pint = polyint(p)
    pint =
    [ 1/3, - x0/2 - x1/2, x0*x1, 0]
>> wint = poly2sym(pint,t)
    wint =
    t^3/3 + (- x0/2 - x1/2)*t^2 + x0*x1*t

请注意,我从coeffs翻了订单,因为订单与poly*系列函数相反

答案 1 :(得分:2)

clear
syms t x0 x1;
r = int((t-x0)*(t-x1),t);
c = evalin(symengine,sprintf('coeff(%s, t)',char(r)));
c0= evalin(symengine,sprintf('coeff(%s, t,0)',char(r)));
if c0==0
   c=[c 0];
end

给出

  [ 1/3, - x0/2 - x1/2, x0*x1, 0]

更新

看起来OP只是想要:

syms t x0 x1;
r=int((t-x0)*(t-x1),t)

给出

t^3/3 + (- x0/2 - x1/2)*t^2 + x0*x1*t