目录
1. 写一个小程序,求出最小的n值,使得n!>realmax。
2.写一个递归函数fibo.m来计算Fibonacci数列。
3.我们可以用subplot在同一个视窗画出两个不同的曲面图。你是否可想出一个聪明的办法,让这两个曲面图各自用到不同的颜色对应表?请举例说明。
4.(选做)以物件方式产生动画,呈现一小圆(半径为1)在一大圆(半径为3)的圆周外部滚动的动画。
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基础
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:已知单位负反馈系统的开环传递函数为
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。