八度控制包tf

时间:2014-11-11 16:37:02

标签: matlab octave

使用octave / matlab控件工具箱:

octave.exe:1> pkg load control

我以两种不同的方式定义相同的传递函数:

octave.exe:2> a = tf('1/(s + 1)')

Transfer function 'a' from input 'u1' to output ...

 y1:  1/(s + 1)

Continuous-time model.
octave.exe:3> b = 1 / (tf('s') + 1)

Transfer function 'b' from input 'u1' to output ...

        1
 y1:  -----
      s + 1

Continuous-time model.

然后在s = j评估它:

octave.exe:4> a(1)
ans =  0 + 1i
octave.exe:5> b(1)
ans =  0.50000 - 0.50000i

为什么这些不同!?

1 个答案:

答案 0 :(得分:2)

我认为您定义a的方式不正确。我不确定为什么它在运行命令时不会出错,但不是你应该如何定义传递函数。如果我们考虑以下因素:

>> a = tf(1,[1 1])

Transfer function 'a' from input 'u1' to output ...

        1
 y1:  -----
      s + 1

Continuous-time model.
>> a(1)
ans =  0.50000 - 0.50000i
>> b = 1/(tf('s')+1)

Transfer function 'b' from input 'u1' to output ...

        1
 y1:  -----
      s + 1

Continuous-time model.
>> b(1)
ans =  0.50000 - 0.50000i
>> c = tf('1/(s+1)')

Transfer function 'c' from input 'u1' to output ...

 y1:  1/(s+1)

Continuous-time model.
>> c(1)
ans =  0 + 1i
>> s = tf('s')

Transfer function 's' from input 'u1' to output ...

 y1:  s

Continuous-time model.
>> d = 1/(s+1)

Transfer function 'd' from input 'u1' to output ...

        1
 y1:  -----
      s + 1

Continuous-time model.
>> d(1)
ans =  0.50000 - 0.50000i

你会注意到我的例子中的c(你自己的a)与所有其他传递函数的显示方式不同,它都在一行上。也许它将输入1/(s+1)视为字符串?我真的不知道。

无论如何,重点是所有其他3种定义传递函数的方法都是正确和等价的,并且都给出了相同和正确的结果。