使用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
为什么这些不同!?
答案 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种定义传递函数的方法都是正确和等价的,并且都给出了相同和正确的结果。