【问题标题】:In Matlab conv with syms argument在带有 syms 参数的 Matlab conv 中
【发布时间】:2015-12-22 14:53:29
【问题描述】:

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

“sym”类型的输入参数的未定义函数“conv2”。

我该如何解决它的错误?我还希望结果是多项式,因为我应该与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 ]

【问题讨论】:

  • 我不明白这个问题。首先是什么让您认为 conv 是合适的?
  • 我有,它会是 conv func。您认为我可以如何解决上面显示的问题。
  • 如果您只是在寻找t^3/3 + (- x0/2 - x1/2)*t^2 + x0*x1*t 作为答案,那么您为什么说您想要w=[ 1/3 -1/2*(x0+x1) x0*x1 0 ]?如果您想要的只是t^3/3 + (- x0/2 - x1/2)*t^2 + x0*x1*t,那么它是 Matlab 中的一行。我也会更新我的答案以显示这一点。

标签: matlab symbolic-math


【解决方案1】:

我认为 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* 系列函数相反

【讨论】:

    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-12
      • 2013-09-06
      • 1970-01-01
      • 1970-01-01
      • 2012-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多