该系列博客主要讲述 M A T L A B {\rm MATLAB} MATLAB软件在自动控制方面的应用,参考书籍:《 M A T L A B / S I M U L I N K {\rm MATLAB/SIMULINK} MATLAB/SIMULINK与控制系统仿真》。
4.复数和复变函数运算
4.1 复数运算基础
-
复数的一般表示
-
M A T L A B {\rm MATLAB} MATLAB是以 i {\rm i} i或 j {\rm j} j表示虚部复数运算;
-
一个复数可以表示为: x = a + b i {\rm x=a+bi} x=a+bi,其中: a {\rm a} a为实部, b {\rm b} b为虚部;
-
复指数形式: x = r e i θ {\rm x=re^{i\theta}} x=reiθ,其中: r {\rm r} r为复数的模,记为 ∣ x ∣ {\rm |x|} ∣x∣, θ {\rm \theta} θ为复数的幅角,记为 a r c t a n ( x ) {\rm arctan(x)} arctan(x),满足关系:
r = a 2 + b 2 , tan θ = b a r=\sqrt{a^2+b^2},\tan\theta=\frac{b}{a} r=a2+b2,tanθ=ab -
一般形式适合处理复数的代数运算,复指数形式适合处理复数旋转等涉及幅角改变的问题;
-
构造复数的方法:
- 直接构造复数:用符号 i {\rm i} i或 j {\rm j} j表示复数单位,将复数看成完整的一个表达式输入;
- 用符号函数法构造复数:将复数看成函数形式,其实部和虚部看成自变量,用 s y m s {\rm syms} syms构造,用 s u b s {\rm subs} subs对符号函数中自变量进行赋值;
-
实例:
% example2_4.m clc; % 直接法构造 image_number1=-1+i; % 实部虚部形式; image_number2=sqrt(2)*exp(i*(3*pi/4)); % 复指数形式; image_number1,image_number2 % 符号函数法构造 syms a b real; image_number3=a+b*i; % 实部虚部形式; image_number3=subs(image_number3,{a,b},{-1,1}); syms r ct real; image_number4=r*exp(ct*i); % 复指数形式; image_number4=subs(image_number4,{r,ct},{sqrt(2),3*pi/4}); image_number3,image_number4
% 结果显示: image_number1 = -1.0000 + 1.0000i image_number2 = -1.0000 + 1.0000i image_number3 = - 1 + 1i image_number4 = - 1 + 1i
-
-
复数矩阵的表示
-
复数矩阵的每个元素都是复数,创建复数矩阵方法:直接创建、利用符号函数创建。
-
复数矩阵直接创建的两种方法:由复数元素构造复数矩阵、利用两个矩阵分别构建实部和虚部构造新的复数矩阵;
-
实例:
% example2_5.m clc; % 直接由元素构造复数矩阵 matrix1=[sqrt(2)*exp((pi/4)*i) 1+2i 1+3i;sqrt(2)*exp((-pi/4)*i) 1-2i 1-3i]; % 分别由实部、虚部构造复数矩阵 matrix_re=[1 1 1;1 1 1]; matrix_im=[1 2 3;-1 -2 -3]; matrix2=matrix_re+matrix_im*i; matrix1,matrix2
% 结果显示: matrix1 = 1.0000 + 1.0000i 1.0000 + 2.0000i 1.0000 + 3.0000i 1.0000 - 1.0000i 1.0000 - 2.0000i 1.0000 - 3.0000i matrix2 = 1.0000 + 1.0000i 1.0000 + 2.0000i 1.0000 + 3.0000i 1.0000 - 1.0000i 1.0000 - 2.0000i 1.0000 - 3.0000i
-
-
复数绘图
-
复数函数的绘图形式:直角坐标图,即分别以复数的实部和虚部为坐标画出复数的表示图;极坐标图,即分别以复数的模和幅角为坐标画图;
-
实例:
% example2_6.m clc; t=0:0.01:2*pi; y=2*t+i*t.*sin(t); r=abs(y);delta=angle(y); subplot(1,2,1); plot(y);grid; set(findobj(get(gca,'Children'),'LineWidth',0.5),'LineWidth',1.5); set(gca, 'GridAlpha', 1); % 设置透明度 title('直角坐标图'); subplot(1,2,2); polarplot(delta,r); set(findobj(get(gca,'Children'),'LineWidth',0.5),'LineWidth',1.5); set(gca, 'GridAlpha', 1); % 设置透明度 title('极坐标图');
-
-
复数的结构操作函数
函数名 函数名 函数名 功能说明 功能说明 功能说明 函数名 函数名 函数名 功能说明 功能说明 功能说明 r e a l ( A ) {\rm real(A)} real(A) 求复数或复数矩阵 A 的实部 求复数或复数矩阵{\rm A}的实部 求复数或复数矩阵A的实部 a b s ( A ) {\rm abs(A)} abs(A) 求复数或复数矩阵 A 的模 求复数或复数矩阵{\rm A}的模 求复数或复数矩阵A的模 i m a g ( A ) {\rm imag(A)} imag(A) 求复数或复数矩阵 A 的虚部 求复数或复数矩阵{\rm A}的虚部 求复数或复数矩阵A的虚部 a n g l e ( A ) {\rm angle(A)} angle(A) 求复数或复数矩阵 A 的相角,单位:弧度 求复数或复数矩阵{\rm A}的相角,单位:弧度 求复数或复数矩阵A的相角,单位:弧度 c o n j ( A ) {\rm conj(A)} conj(A) 求复数或复数矩阵 A 的共轭 求复数或复数矩阵{\rm A}的共轭 求复数或复数矩阵A的共轭
4.2 拉普拉斯变换及反变换
拉普拉斯变换函数语法格式:
L=laplace(F)
函数说明:
F:时域函数表达式,约定的变量是t,得到的拉氏变换函数是L(s);
拉普拉斯反变换函数语法格式:
F=ilaplace(L)
Tips:
符号变量设置函数syms语法格式:
syms arg1 arg2 ...
函数说明:
用于设置符号运算的变量arg1,arg2等;
若需要说明变量数据类型,语法格式:
syms arg1 arg2 ... datatype
函数说明:
datatype:real(实型)、positive(整型)、unreal(非实型);
实例:求函数 f 1 ( t ) = sin ω t , f 2 ( t ) = cos ω t f_1(t)=\sin\omega{t},f_2(t)=\cos{\omega{t}} f1(t)=sinωt,f2(t)=cosωt的拉氏变换。
% example2_7.m
clc;
syms w s t;
f1=sin(w*t);
f2=cos(w*t);
L1=laplace(f1);
L2=laplace(f2);
L1,L2
% 结果显示(可查表):
L1 = w/(s^2 + w^2)
L2 = s/(s^2 + w^2)
实例:求函数 F 1 ( s ) = ω s 2 + ω 2 , F 2 ( s ) = s s 2 + ω 2 F_1(s)=\displaystyle\frac{\omega}{s^2+\omega^2},F_2(s)=\displaystyle\frac{s}{s^2+\omega^2} F1(s)=s2+ω2ω,F2(s)=s2+ω2s的拉氏反变换。
% example2_8.m
clc;
syms w s t;
F1=w/(s^2 + w^2);
F2=s/(s^2 + w^2);
f1=ilaplace(F1);
f2=ilaplace(F2);
f1,f2
% 结果显示:
f1 = sin(t*w)
f2 = cos(t*w)
4.3 Z变换及其反变换
Z变换语法格式:
F=ztrans(f):函数返回独立变量n关于符号向量f的Z变换函数;
F=ztrans(f,w):函数返回独立变量n关于符号向量f的Z变换函数,用w代替默认的z;
F=ztrans(f,k,w):函数返回独立变量n关于符号向量k的Z变换函数;
Z反变换语法格式:
f=iztrans(F):函数返回独立变量z关于符号向量F的Z反变换函数;
f=iztrans(F,k):函数返回独立变量k关于符号向量F的Z反变换函数,用k代替默认的z;
f=iztrans(F,w,k):函数返回独立变量w关于符号向量F的Z反变换函数;
实例:求解函数 f 1 ( t ) = t 、 f 2 ( t ) = e − a t 、 f 3 ( t ) = sin ( a t ) f_1(t)=t、f_2(t)={\rm e}^{-at}、f_3(t)=\sin(at) f1(t)=t、f2(t)=e−at、f3(t)=sin(at)的 Z Z Z变换。
% example2_9.m
clc;
syms n a w k z T; % T为周期变量;
x1=ztrans(n*T);x1=simplify(x1);
x2=ztrans(exp(-a*n*T));x2=simplify(x2);
x3=ztrans(sin(w*a*T),w,z);x3=simplify(x3);
x1,x2,x3
% 结果显示:
x1 = (T*z)/(z - 1)^2
x2 = z/(z - exp(-T*a))
x3 = (z*sin(T*a))/(z^2 - 2*cos(T*a)*z + 1)
实例:求解函数 F 1 ( s ) = 1 s ( s + 1 ) 、 F 2 ( s ) = s s 2 + a 2 、 F 3 ( s ) = a − b ( s + a ) ( s + b ) F_1(s)=\displaystyle\frac{1}{s(s+1)}、F_2(s)=\displaystyle\frac{s}{s^2+a^2}、F_3(s)=\displaystyle\frac{a-b}{(s+a)(s+b)} F1(s)=s(s+1)1、F2(s)=s2+a2s、F3(s)=(s+a)(s+b)a−b的 Z Z Z变换。
% example2_10.m
clc;
syms s n t1 t2 t3 a b k z T;
% 对函数进行拉氏反变换
x1=ilaplace(1/s/(s+1),t1);x1=simplify(x1);
x2=ilaplace(s/(s^2+a^2),t2);x2=simplify(x2);
x3=ilaplace((a-b)/(s+a)/(s+b),t3);x3=simplify(x3);
% x1,x2,x3
% x1 = 1 - exp(-t1)
% x2 = cos(a*t2)
% x3 = exp(-b*t3) - exp(-a*t3)
% 对函数进行Z变换
z1=ztrans(1-exp(-n*T));z1=simplify(z1);
z2=ztrans(cos(a*n*T));z2=simplify(z2);
z3=ztrans(exp(-b*n*T)-exp(-a*n*T));z3=simplify(z3);
z1,z2,z3
% 结果显示:
z1 = z/(z - 1) - z/(z - exp(-T))
z2 = (z*(z - cos(T*a)))/(z^2 - 2*cos(T*a)*z + 1)
z3 = z/(z - exp(-T*b)) - z/(z - exp(-T*a))
实例:求函数 F 1 ( z ) = 2 z 2 − 0.5 z z 2 − 0.5 z − 0.5 、 F 2 ( z ) = z + 0.5 z 2 + 3 z + 2 F_1(z)=\displaystyle\frac{2z^2-0.5z}{z^2-0.5z-0.5}、F_2(z)=\displaystyle\frac{z+0.5}{z^2+3z+2} F1(z)=z2−0.5z−0.52z2−0.5z、F2(z)=z2+3z+2z+0.5的 Z Z Z反变换。
% example2_11.m
clc;
syms z a k T;
z1=iztrans((2*z^2-0.5*z)/(z^2-0.5*z-0.5));z1=simplify(z1);
z2=iztrans((z+0.5)/(z^2+3*z+2));z2=simplify(z2);
z1,z2
% 结果显示:
z1 = (-1/2)^n + 1
z2 = (-1)^n/2 - (3*(-2)^n)/4 + kroneckerDelta(n, 0)/4