自动控制导论-matlab

目录

作业一:matlab基础

1. 写一个小程序,求出最小的n值,使得n!>realmax。

2.写一个递归函数fibo.m来计算Fibonacci数列。

作业二:matlab绘图

1. 画一个圆。

2. 画一个球。

3.我们可以用subplot在同一个视窗画出两个不同的曲面图。你是否可想出一个聪明的办法,让这两个曲面图各自用到不同的颜色对应表?请举例说明。

4.(选做)以物件方式产生动画,呈现一小圆(半径为1)在一大圆(半径为3)的圆周外部滚动的动画。

作业三:matlab计算

1. 试用MATLAB的左除运算,找出最接近下列五点的最小平方三次多项式:(1,5)(2,3)(3,4)(4,7)(5,2)并画出此多项式和这五个数据点。

2. 在XY平面上有三条直线:2x-y=2;x-2y=-2;x+y=1;试用 MATLAB的左除找到一点P,使得P到三条直线的距离平方和最小。

作业四:matlab综合应用


作业一:matlab基础

1. 写一个小程序,求出最小的n值,使得n!>realmax。

realmax:最大正浮点数

x = unifrnd(0,100,1,10);    %%产生范围在0-100的1*10阶的均匀分布随机数矩阵
plot(x);

%%求最大浮点数realmax
realmax = x(1,1);
for i=1:10         
    if x(1,i)<= realmax
        realmax = realmax;
    else realmax=x(1,i);  
    end
    i = i+1;
end

%%求最小正整数n
for n=1:ceil(realmax)
    nfac=1;          %%计算n的阶乘:nfac
    for i=1:n
        nfac=nfac*i;
        i=i+1;
    end
  if nfac>realmax     %%nfac大于realmax时,中止循环
      N=n;
      break
  else
      n=n+1;
  end
end

如图,产生的最大浮点数为98.7982,最小的N为5

2.写一个递归函数fibo.m来计算Fibonacci数列。

Fibonacci数列定义如下:

fibo(n+2)=fibo(n+1)+fibo(n)

此数列的初始条件如下: fibo(1)=0, fibo(2)=1

如果不用递归函数,该如何实现?(附加)

N=10;
fibo(1)=0;
fibo(2)=1;
for i=3:N
    fibo(i)=fibo(i-1)+fibo(i-2);
end
fibo(1:N)'

作业二:matlab绘图

1. 画一个圆。

x0=5;
y0=8; %%圆心(x0,y0)
aplha=0:pi/40:2*pi;%%圆心角
r=6;  %%半径
x=r*cos(aplha)+x0;
y=r*sin(aplha)+y0;
plot(x,y,'r');

2. 画一个球。

利用函数sphere定义球的相关参数,用surf或者mesh绘制立体图

drawsphere(1,2,3,4);
function drawsphere(a,b,c,R)

    [x,y,z] = sphere(20);

    % 调整半径
    x = R*x; 
    y = R*y;
    z = R*z;

    % 调整球心
    x = x+a;
    y = y+b;
    z = z+c;
    
    figure;
    axis equal;
    surf(x,y,z);
    title('surf');
    
    figure;
    axis equal;
    mesh(x,y,z);
    title('mesh');
    
end

使用 surf 绘制:

 使用mesh绘制:

3.我们可以用subplot在同一个视窗画出两个不同的曲面图。你是否可想出一个聪明的办法,让这两个曲面图各自用到不同的颜色对应表?请举例说明。

不同颜色对应表如下:

分块使用不同的颜色对照表,这是matlab R2019b的新功能。我们可以使用 tiledlayout 和 nexttile 函数来显示分块图。譬如本题,调用 tiledlayout 函数以创建一个 2×1 分块图布局。调用 nexttile 函数以创建坐标区对象 ax1 和 ax2。通过将坐标区对象传递给 colormap 函数,为每个坐标区指定不同的颜色图。在上坐标区中,使用 spring 颜色图创建一个曲面图。在下坐标区中,使用 winter 颜色图创建一个曲面图。

tiledlayout(2,1)
ax1 = nexttile;
surf(peaks)
colormap(ax1,spring)

ax2 = nexttile; 
surf(peaks)
colormap(ax2,winter)

4.(选做)以物件方式产生动画,呈现一小圆(半径为1)在一大圆(半径为3)的圆周外部滚动的动画。

%%以物件方式产生动画,呈现小圆在大圆圆周外部滚动的动画
%%小圆半径为1,大圆圆心(0,0),半径为3,即x^2+y^2=9
a = 0:pi/180:2*pi;
b = 0:pi/180:2*pi;
xmax = 0+3*cos(a);
ymax = 0+3*sin(a);
plot(xmax,ymax);
axis([-6 6 -6 6]);
grid on;
hold on;
x0 = 4+1*cos(b);
y0 = 0+1*sin(b)
h = plot(x0,y0,'EraseMode','xor');
for k = 1:1000;     %%循环一千次
    for i = 0+2*k*pi:pi/180:2*pi+2*k*pi
    xmin = 4*cos(i)+1*cos(b);
    ymin = 4*sin(i)+1*sin(b);
    set(h,'ydata',ymin);
    set(h,'xdata',xmin);
    drawnow;
    end
end;

 

 

作业三:matlab计算

1. 试用MATLAB的左除运算,找出最接近下列五点的最小平方三次多项式:(1,5)(2,3)(3,4)(4,7)(5,2)并画出此多项式和这五个数据点。

clear all,close all
x1 = 1;y1 = 5;
x2 = 2;y2 = 3;
x3 = 3;y3 = 4;
x4 = 4;y4 = 7;
x5 = 5;y5 = 2;
A = ones(4,4);
B = ones(4,1);
%%求矩阵A中元素的值
for i = 1:4
    for j = 1:4
        A(i,j) = x1^(i-j+3)+x2^(i-j+3)+x3^(i-j+3)+x4^(i-j+3)+x5^(i-j+3);
    end
end
%%求矩阵B中元素的值
for i = 1:4
    B(i,1) = x1^(i-1)*y1+x2^(i-1)*y2+x3^(i-1)*y3+x4^(i-1)*y4+x5^(i-1)*y5;
end
matX = [x1 x2 x3 x4 x5];
matY = [y1 y2 y3 y4 y5];
X = A\B;   %%左除,求得多项式系数

syms x 
y = X(1,1)*x.^3+X(2,1)*x.^2+X(3,1)*x+X(4,1); %%多项式
fplot(x,y);
hold on
plot(matX,matY,'*')

 可以看出,拟合效果很好。

 

2. 在XY平面上有三条直线:2x-y=2;x-2y=-2;x+y=1;试用 MATLAB的左除找到一点P,使得P到三条直线的距离平方和最小。

%%在XY平面上有三条直线:2x-y=2;x-2y=-2;x+y=1;
%%试用 MATLAB的左除找到一点P,使得P到三条直线的距离平方和最小。
clear all,close all
syms x
y1 = 2*x-2;
y2 = x/2+1;
y3 = -x+1;
syms x0 y0
matK = [2 1/2 -1];
matB = [-2 1 1];
A = zeros(2,2);
B = zeros(2,1);
%%给矩阵A和矩阵B赋值
for i = 1:3 
    A(1,1) = -2*matK(1,i)^2/(matK(1,i)^2+1)+A(1,1);
    A(1,2) = 2*matK(1,i)/(matK(1,i)^2+1)+A(1,2);
    A(2,1) = -2*matK(1,i)/(matK(1,i)^2+1)+A(2,1);
    A(2,2) = 2/(matK(1,i)^2+1)+A(2,2);
    B(1,1) = 2*matK(1,i)*matB(1,i)/(matK(1,i)^2+1)+B(1,1);
    B(2,1) = 2*matB(1,i)/(matK(1,i)^2+1)+B(2,1);
end
X = [];
X = A\B;
fplot(x,y1,'r')
hold on;
fplot(x,y2,'b')
hold on;
fplot(x,y3,'g')
hold on;
plot(X(1,1),X(2,1),'*');

P(0.7500,0.7500) 

作业四:matlab综合应用

用MATLAB解决其他课程学习或个人感兴趣课题的问题,并撰写文字进行说明。

eg:已知单位负反馈系统的开环传递函数为

G(s)=\frac{20}{(s+4)(s+K)}

matlab绘制根轨迹图,并求出系统临界阻尼时对应的K值。

%%matlab进行线性系统跟轨迹分析
G = tf([1 4],[1 4 20]);%%建立等效开环传递函数模型
subplot(211)
pzmap(G);               %%绘制零极点分布图
subplot(212)
rlocus(G);              %%绘制根轨迹
rlocfind(G);            %%确定增益以及相应的闭环极点

 从图中读出,s = -8.49,K = 12.9。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值