wander1984 发表于 2007-7-9 15:35

谁能帮我看看程序出错在哪?谢谢!

菜鸟刚学matlab,主要用于信号与线性系统课程的仿真用

源程序如下:
%求系统y⑵(t)+6y⑴(t)+8y(t)=3X⑴(t)+9X(t)的冲激响应和阶跃响应
%求系统的冲激响应
b = ;
a = ;
H = tf(b,a);%求系统函数
t = 0:0.1:10;
y = impulse(H,t);
subplot(2,1,1),plot(t,y);
xlabel('时间(t)');
ylabel('y(t)');
title('单位冲激响应');

%显示传输函数
h = ilaplace(H);
subplot(3,1,2),plot(t,h);
title('传输函数');


报错为:
Function 'ilaplace' is not defined for values of class 'tf'.


我查看了一下H变量,显示为:
>> H

Transfer function:
   3 s + 9
-------------
s^2 + 6 s + 8

>> whos H
Name      Size                  BytesClass

H         1x1                      2190tf object

Grand total is 31 elements using 2190 bytes

H的class为tf是什么意思?tf函数是求传输函数用的。是不是因为这才导致ilaplace不能执行?

麻烦哪位高人热心解答下,不胜感激!

花如月 发表于 2007-7-9 17:04

错误原因:tf的结果是char类型,而ilaplace需要的是符号函数。
clear;
syms t s
H1=sym('(3*s+9)/(s^2+6*s+8)');
h=ilaplace(H1,s,t);%计算传递函数
b = ;
a = ;
H = tf(b,a);%求系统函数
t = 0:0.1:10;
y = impulse(H,t);
subplot(2,1,1),plot(t,y);
xlabel('时间(t)');
ylabel('y(t)');
title('单位冲激响应');
subplot(2,1,2),fplot(inline(char(h)),[-1 1]);
title('传输函数');

[ 本帖最后由 花如月 于 2007-7-9 17:06 编辑 ]

wander1984 发表于 2007-7-9 17:44

运行成功,谢谢!

wander1984 发表于 2007-7-9 18:16

但是还是个问题啊,你得重新定义一个变量“H1=sym('(3*s+9)/(s^2+6*s+8)');”

这表明我在程序运行中还得看H的表达式,这对程序运行很不方便,麻烦你再看看,谢谢!

wander1984 发表于 2007-7-11 10:48

H2=sym(H)
??? Error using ==> sym.sym
Conversion to 'sym' from 'tf' is not possible.

非得知道H的表达式,才能通过“H1=sym('(3*s+9)/(s^2+6*s+8)');”转成符号函数吗?麻烦你再看看,能不能优化下

咕噜噜 发表于 2007-7-11 11:49

花如月给的没问题吧,你用7.0?花如月的程序得到的结果
页: [1]
查看完整版本: 谁能帮我看看程序出错在哪?谢谢!