2012-05-15 2 views
0

Прежде всего, я использую sym, поэтому мне нужна функция (Heaviside). Я знаю, что в Matlab существует heaviside(t), поэтому я использую это.Z Transform Matlab Ezplot Error

Теперь предположим, что у меня есть функция: x = -2^(-n+1)*heaviside(n-2) с syms n. Сейчас:

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

(Это должно вернуть первоначальную х функцию)

Это возвращает 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, которые не могли бы выполнять ...

+0

Работает в mupad. вы можете запустить свой код там – Rasman

ответ

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)