0

首先,我使用的是sym,所以我需要一个step(Heaviside)函数。我知道 Matlab 中存在一个heaviside(t),所以我正在使用它。

现在,假设我有函数:x = -2^(-n+1)*heaviside(n-2)with syms nbefore。现在:

X = ztrans(x);   // z transform
x = iztrans(X);  // inverse z transform

(这应该返回原始的 x 函数)

这返回x = kroneckerDelta(n - 1, 0) + kroneckerDelta(n - 2, 0)/4 - 2*(1/2)^n + 2*kroneckerDelta(n, 0)

当我现在尝试绘制x时,使用ezplot(x)它会返回一堆错误:

Error using inlineeval (line 15)
Error in inline expression ==> kroneckerDelta(n - 1, 0) + kroneckerDelta(n - 2, 0)./4 - 2.*(1./2).^n + 2.*kroneckerDelta(n, 0)
 Undefined function 'kroneckerDelta' for input arguments of type 'double'.

Error in inline/feval (line 34)
        INLINE_OUT_ = inlineeval(INLINE_INPUTS_, INLINE_OBJ_.inputExpr, INLINE_OBJ_.expr);

Error in ezplotfeval (line 52)
    z = feval(f,x(1));

Error in ezplot>ezplot1 (line 467)
    [y, f, loopflag] = ezplotfeval(f, x);

如何绘制函数 x 或阻止这些错误出现?我只使用了Matlab固有的功能,不知道该怎么办......

4

1 回答 1

0

我敢打赌ezplot,通过评估函数来代替符号变量的一些实数值n。在这种情况下,kroneckerDelta只接受整数值(非双精度)输入。所以一个想法是使用subs将整数放入kroneckerDelta.

x =

kroneckerDelta(n - 1, 0) + kroneckerDelta(n - 2, 0)/4 - 2*(1/2)^n + 2*kroneckerDelta(n, 0)

>> subs(x,-5:5)

ans =

[ -64, -32, -16, -8, -4, 0, 0, -1/4, -1/4, -1/8, -1/16]

>> plot(-5:5,ans)
于 2012-05-15T16:50:30.073 回答