MATLAB控制系统仿真2.4:复数和复变函数运算

该系列博客主要讲述 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 复数运算基础
  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
      
  2. 复数矩阵的表示

    • 复数矩阵的每个元素都是复数,创建复数矩阵方法:直接创建、利用符号函数创建。

    • 复数矩阵直接创建的两种方法:由复数元素构造复数矩阵、利用两个矩阵分别构建实部和虚部构造新的复数矩阵;

    • 实例:

      % 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
      
  3. 复数绘图

    • 复数函数的绘图形式:直角坐标图,即分别以复数的实部和虚部为坐标画出复数的表示图;极坐标图,即分别以复数的模和幅角为坐标画图;

    • 实例:

      % 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('极坐标图');
      

      2_6

  4. 复数的结构操作函数

    函数名 函数名 函数名 功能说明 功能说明 功能说明 函数名 函数名 函数名 功能说明 功能说明 功能说明
    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ωtf2(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)=tf2(t)=eatf3(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)1F2(s)=s2+a2sF3(s)=(s+a)(s+b)ab 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)=z20.5z0.52z20.5zF2(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
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MATLAB是一种功能强大的数学计算软件,它也提供了丰富的工具和函数来进行控制系统仿真设计。控制系统仿真设计是指使用计算机模拟和分析控制系统的行为,以评估和优化系统的性能。 在MATLAB中,控制系统仿真设计通常涉及以下几个步骤: 1. 建立系统模型:首先,需要建立控制系统的数学模型。可以使用传递函数、状态空间模型或者差分方程等形式来描述系统的动态行为。 2. 设计控制器:根据系统的需求和性能指标,设计合适的控制器。常见的控制器设计方法包括PID控制器、根轨迹设计、频域设计等。 3. 仿真系统响应:使用MATLAB提供的仿真工具,如Simulink,对控制系统进行仿真。可以输入不同的信号作为系统的输入,观察系统的输出响应,并评估系统的性能。 4. 优化系统性能:根据仿真结果,对系统进行调整和优化。可以通过调整控制器参数、改系统结构等方式来改善系统的性能。 5. 分析结果:通过分析仿真结果,评估系统的稳定性、鲁棒性、响应速度等性能指标。可以使用MATLAB提供的绘图和分析工具来进行结果的可视化和分析。 MATLAB还提供了丰富的工具箱和函数,用于控制系统仿真设计。例如,Control System Toolbox提供了各种控制系统设计和分析工具,Simulink提供了直观的图形化建模和仿真环境,Simscape可以进行物理系统建模和仿真等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FUXI_Willard

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值