键入 c=conv(ab)%求多项式的乘积 则有 1.7.3微分与赋值运算 多项式的微分由 polder命令完成。如 1 键入 d= polder(p)%对多项式p(x)求微分 给出p(x)中自变量的范围, polyol命令可以计算多项式的值。如键入下列语句 x=-1:0.1:2; 6x由-1到2,步长0.1,共30个点 y=polyval (p, x) 可以得到一组对应于x的y的值(30个点),可以利用绘图命令plot(xy),画出x和 y的关系 1.74有理多项式 在线性系统的 Fourier变换、 Laplace变换和Z变换中,经常用到有理多项式。 MATLAB 提供了一些命令可以进行有理多项式的运算。 MATLAB中的有理多项式是由分子多项式和 分母多项式表示的,可以用 residue命令进行部分分式展开。该命令形式为 [r, p, k]=residue (mum, den 式中,mum和den分别表示分子和分母多项式的系数行向量 分解的结果形式: G(s)=num(s) r() (2) +…+./( den(s) s+ p(I)s+p(2) s+pn) +k(s) 式中k(s)为常数项或纯微分项 例如,对已知传递函数 G(s)=-10(s+3) (s+1)(s2+s+3) 进行部分分式分解,运算过程如下: 定义、输入数据为 1243 %定义分母多项式 %定义分子多项式 Ir,p, k=residue(n, d) %进行部分分式展开 结果为: 其中,k=[[表示没有常数项。 结果表明,传递函数G(s)被分解为下面的部分分式形式
16 b= 1 2 4 键入 c=conv(a,b) % 求多项式的乘积 则有 1.7.3 微分与赋值运算 多项式的微分由 polyder 命令完成。如 p= 1 2 0 -5 6 键入 d=polyder(p) % 对多项式 p(x)求微分 得 给出 p(x)中自变量的范围,polyval 命令可以计算多项式的值。如键入下列语句: x=-1:0.1:2; % x 由-1 到 2,步长 0.1,共 30 个点 y=polyval (p,x); 可以得到一组对应于 x 的 y 的值(30 个点),可以利用绘图命令 plot(x,y),画出 x 和 y 的关系。 1.7.4 有理多项式 在线性系统的 Fourier 变换、Laplace 变换和 Z 变换中,经常用到有理多项式。MATLAB 提供了一些命令可以进行有理多项式的运算。MATLAB 中的有理多项式是由分子多项式和 分母多项式表示的,可以用 residue 命令进行部分分式展开。该命令形式为 [r,p,k]=residue(mum,den) 式中,mum 和 den 分别表示分子和分母多项式的系数行向量。 分解的结果形式: ( ) ( ) ( ) (2) (2) (1) (1) ( ) ( ) ( ) k s s p n r n s p r s p r den s num s G s + + + + + + + = = 式中 k(s)为常数项或纯微分项。 例如,对已知传递函数 ( 1)( 3) 10( 3) ( ) 2 + + + + = s s s s G s 进行部分分式分解,运算过程如下: 定义、输入数据为 d= 1 2 4 3 % 定义分母多项式 n= 10 30 % 定义分子多项式 键入 [r,p,k]=residue(n,d) % 进行部分分式展开 结果为: 其中,k=[][表示没有常数项。 结果表明,传递函数 G(s)被分解为下面的部分分式形式
n(s)_-33-4.0202i-333+40202166667 d(s)s+0.5-16583+0.5+1.6583is+ 注意,该命令得到的低阶分式都是一阶形式,分子上是常值。显然,由于原传递函数 有复特征值,利用该命令得到的展开式不是常用的实数形式。当然,可以利用多项式的乘法 命令conv进行通分得到实数形式如下。 若键入 rl=r(1),r2=(2)%数值定义成多项式rl,r2 则显示 键入 pl=[1l-p(1)],p2=[l→p(2)]%定义两个极点多项式pl(s)=sp(1),p2(s) =sp(2) 显示 键入den=vonv(plp2)%求分母多项式den=pl(s*p2(s) 显示 键入 mum= conv(r1,p2)+ von(r2,pl)%求分子多项式 显示 得到的部分分式形式为 n(s)-6.6667s+1066667 d(s)s2+s+3s+1 根据给出的r,p,k的值,可以用一个命令求出传递函数的有理多项式。如利用上面求 出的结果,键入命令: Inum, den]=residue(r,p, k) 可以得到 可以看到,求出的分子多项式和分母多项式与给定的传递函数G(s)形式相同。多项 式运算的其它命令和功能,在表1-12中列出。 命令 说明 Conv(a, b) 乘法 [a, rI=decon(a, b 除法 poly(r) 用根构造多项式 older(a) 对多项式或有理多项式求导 polyfit(x,y, n) 多项式数据拟合 计算x对应的多项式的值 [[p, k]=residue(a, b) 部分分式展开式 [a, b]=residue(r, p, k) 部分分式组合 求多项式的根 控制语句与逻辑运算 控制语句包括循环与条件语句。它们决定了运算过程和路径,因此被称为控制语句。 循环和条件语句包含在每一种可以用于进行科学计算的计算机语言中。它们更适合人的思 维,扩展了计算功能,并节省了语句,使程序看来更为简洁、清晰。 MATLAB的循环和条件语句中,由于经常包括了饿大量的 MATLAB命令,一般用于
17 1 6.6667 0.5 1.6583 3.3333 4.0202 0.5 1.6583 3.3333 4.0202 ( ) ( ) + + + + − + + + − − − = s i s i s i i d s n s 注意,该命令得到的低阶分式都是一阶形式,分子上是常值。显然,由于原传递函数 有复特征值,利用该命令得到的展开式不是常用的实数形式。当然,可以利用多项式的乘法 命令 conv 进行通分得到实数形式如下。 若键入 r1=r(1),r2=r(2) % 数值定义成多项式 r1,r2 则显示 键入 p1=[1—p(1)],p2=[1—p(2)] % 定义两个极点多项式 p1(s)=s—p(1),p2(s) =s—p(2) 显示 键入 den=vonv(p1,p2) % 求分母多项式 den=p1(s)*p2(s) 显示 键入 mum=conv(r1,p2) + vonv(r2,p1) % 求分子多项式 显示 得到的部分分式形式为 1 6.6667 3 6.6667 10 ( ) ( ) 2 + + + + − + = s s s s d s n s 根据给出的 r,p,k 的值,可以用一个命令求出传递函数的有理多项式。如利用上面求 出的结果,键入命令: [num,den]=residue(r,p,k) 可以得到 可以看到,求出的分子多项式和分母多项式与给定的传递函数 G(s)形式相同。多项 式运算的其它命令和功能,在表 1—12 中列出。 命令 说明 Conv(a,b) [q,r]=deconv(a,b) poly(r) polyder(a) polyfit(x,y,n) polyval(p,x) [r,p,k]=residue(a,b) [a,b]=residue(r,p,k) roots(a) 乘法 除法 用根构造多项式 对多项式或有理多项式求导 多项式数据拟合 计算 x 对应的多项式的值 部分分式展开式 部分分式组合 求多项式的根 1.8 控制语句与逻辑运算 控制语句包括循环与条件语句。它们决定了运算过程和路径,因此被称为控制语句。 循环和条件语句包含在每一种可以用于进行科学计算的计算机语言中。它们更适合人的思 维,扩展了计算功能,并节省了语句,使程序看来更为简洁、清晰。 MATLAB 的循环和条件语句中,由于经常包括了饿大量的 MATLAB 命令,一般用于
M文件中更为合适(可以查阅M文件说明),而不常采用直接在工作空间中键入方式。下面 介绍的在工作空间中键入的程序,可以直接写入M文件调用 1.8.1for循环 for循环语句允许按照给出的范围或固定的次数重复完成一个(或一组)运算。它从for 开始,用end结束,也叫做 for-end结构。for语句的基本格式为 for循环变量=数组范围 命令串 end 执行for语句时,循环变量按照数组指定的范围逐步取值,每一步执行一次命令串,直 至循环变量按照数组指定全部取值完毕。例如,运行下面的for循环子程序。 键入 for n=1: 5 %循环变量取值从1到5,每步按1递增 x(n)=n 2 %运算命令 %结束循环运算 再键入 结果为 循环变量的范围可以是任意数组,如: 3 5 9 执行如下for循环运算: for i=a y=i(1)-i(2)+i(3) 结果为 由于A是3行4列矩阵,计算时将a按列分步赋值给变量i,所以,在每一步循环时 取a的一列进行运算。很明显,如执行下面的循环运算 for n=a 结果为 这种用法扩展了for语句的应用范围。另外,for语句可以嵌套,例如: for =1: 3 frj=5:11 a(1,j=1 2+j 2 执行完上述for语句,若想知道结果,键入a 得到 1.82 While循环 for循环以固定的次数求一组命令的值。 MATLAB提供了另一种循环语句 while。它根 据给出的条件,以不定的次数求一组命令的值。该循环语句的结构为: whle条件表达式
18 M 文件中更为合适(可以查阅 M 文件说明),而不常采用直接在工作空间中键入方式。下面 介绍的在工作空间中键入的程序,可以直接写入 M 文件调用。 1.8.1 for 循环 for 循环语句允许按照给出的范围或固定的次数重复完成一个(或一组)运算。它从 for 开始,用 end 结束,也叫做 for-end 结构。for 语句的基本格式为: for 循环变量=数组范围 命令串 end 执行 for 语句时,循环变量按照数组指定的范围逐步取值,每一步执行一次命令串,直 至循环变量按照数组指定全部取值完毕。例如,运行下面的 for 循环子程序。 键入 for n=1:5 % 循环变量取值从 1 到 5,每步按 1 递增 x(n)=nˆ2; % 运算命令 end % 结束循环运算 再键入 x 结果为 循环变量的范围可以是任意数组,如: 1 2 3 4 5 6 7 8 9 10 11 12 执行如下 for 循环运算: for i=a y=i(1)-i(2)+i(3) end 结果为 由于 A 是 3 行 4 列矩阵,计算时将 a 按列分步赋值给变量 i,所以,在每一步循环时, i 取 a 的一列进行运算。很明显,如执行下面的循环运算: for n=a y=n end 结果为 这种用法扩展了 for 语句的应用范围。另外,for 语句可以嵌套,例如: for i=1:3 for j=5:-1:1 a(i,j)=iˆ2+jˆ2 end end 执行完上述 for 语句,若想知道结果,键入 a 得到 1.8.2 While 循环 for 循环以固定的次数求一组命令的值。MATLAB 提供了另一种循环语句 while。它根 据给出的条件,以不定的次数求一组命令的值。该循环语句的结构为: while 条件表达式
命令串 其执行方式为,若条件表达式中的条件成立,则执行命令串;如果表达式不成立,则 跳出循环,向下继续执行。例如执行下面的循环语句 while n<=10%循环条件 s=s+n;n=n+1%命令 若想知道结果,键入 得到 该循环只进行到n=10为止。 18.3条件语句 除了前面介绍的循环语句结构之外, MATLAB还提供了条件转移语句,得到 MATLAB 更易于使用。条件语句的格式为 if条件表达式 命令串 end 当给出的条件表达式成立时,执行命令语句,然后继续向下执行;若条件不成立,则 跳出条件块而直接向下执行。循环语句和条件语句中的条件表达式用逻辑关系符号表示。如 大于等于”用“>=”表示,“等于”用“==”表示,可参看1.84节“关系与逻辑运算” 例 for n=1: 4 ifn>2 结构为 很明显,当n=1,2时,不满足条件,程序转而执行下面的循环。 条件语句还有if- else-end结构,结构形式为 if条件表达式1 命令串 elseif条件表达式2 命令串2 else 命令串3 执行上述语句时,如果条件表达式1的条件成立,那么就执行命令串1:如果条件1不 成立,条件2成立,则执行命令串2:否则执行命令串3。 MATLAB允许多层不相交的条件 语句嵌套 另外,在执行for和 while循环语句时,可以利用if+ break语句中止循环运算。如 sum=0 for m=1: 10 %循环变量从1到100
19 命令串 end 其执行方式为,若条件表达式中的条件成立,则执行命令串;如果表达式不成立,则 跳出循环,向下继续执行。例如执行下面的循环语句: s=0; n=1; while n<=10 % 循环条件 s=s+n; n=n+1 % 命令 end 若想知道结果,键入 s 得到 该循环只进行到 n=10 为止。 1.8.3 条件语句 除了前面介绍的循环语句结构之外,MATLAB 还提供了条件转移语句,得到 MATLAB 更易于使用。条件语句的格式为 if 条件表达式 命令串 end 当给出的条件表达式成立时,执行命令语句,然后继续向下执行;若条件不成立,则 跳出条件块而直接向下执行。循环语句和条件语句中的条件表达式用逻辑关系符号表示。如 “大于等于”用“>=”表示,“等于”用“= =”表示,可参看 1.8.4 节“关系与逻辑运算”。 例如: y=0; for n=1:4 if n>2 end end 结构为 很明显,当 n=1,2 时,不满足条件,程序转而执行下面的循环。 条件语句还有 if-else-end 结构,结构形式为: if 条件表达式 1 命令串 1 elseif 条件表达式 2 命令串 2 ┇ else 命令串 3 end 执行上述语句时,如果条件表达式 1 的条件成立,那么就执行命令串 1;如果条件 1 不 成立,条件 2 成立,则执行命令串 2;否则执行命令串 3。MATLAB 允许多层不相交的条件 语句嵌套。 另外,在执行 for 和 while 循环语句时,可以利用 if+break 语句中止循环运算。如: sum=0; for m=1:100 % 循环变量从 1 到 100