MATLAB程序设计作业
Matlab程序设计
班级
姓名
学号
《MATLAB程序设计》作业
1、考虑如下x-y 一组实验数据:
x=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y=[1.2, 3, 4, 4, 5, 4.7, 5, 5.2, 6, 7.2]
分别绘出plot的原始数据、一次拟合曲线和三次拟合曲线,给出MATLAB代码和运行结果。
代码如下:
x=[1,2,3,4,5,6,7,8,9,10];
y=[1.2,3,4,4,5,4.7,5,5.2,6,7.2];
plot(x,y);
title('原始数据');
p=polyfit(x,y,1);
q=polyval(p,x);
figure,plot(x,q);
title('一次拟合');
p=polyfit(x,y,2);
q=polyval(p,x);
figure,plot(x,q);
title('二次拟合');
运行结果如下:
1
2
3
4
5
6
7
8
9
10
12
3
4
5
6
7
8
原始数据
123
456789
102
2.5
3
3.54
4.5
55.56
6.57一次拟合
123456789
101
2
3
4
5
6
7
二次拟合
2、在[0,3π]区间,绘制y=sin(x)曲线(要求消去负半波,即(π,2π)区间内的函数值置零),求出曲线y 的平均值,以及y 的最大值及其最大值的位置。给出执行代码和运行结果。
代码如下: clear clc
x=(0:0.01:3*pi); y=sin(x); plot(x,y); y1=(y>=0).*y; figure,plot(x,y1);
p=mean(y1); [max_p,n]=max(y1); disp('均值:'); disp(p); disp('最大值:'); disp(max_p); disp('最大值位置:'); disp(n);
运行结果如下:
1
2
3
4
5
6
7
8
9
10
-1-0.8-0.6-0.4-0.200.20.40.60.810
1
2
3
4
5
6
7
8
9
10
00.10.20.30.40.50.60.70.80.91
3、给出函数z=x^2+y^2的三维曲面的绘制结果和MATLAB 代码
clear clc
t=[-5:0.1:5];
[x,y]=meshgrid(t); z=x.^2+y.^2; mesh(x,y,z);
-5
5
-5
5
010203040
50
4、将一幅彩色图像文件转换为灰度图像,存储并显示转换后的灰度图像,给出运行结果和执行代码。
x=imread('C:\Users\dell\Desktop\扫描材料1\张仲瑾照片.jpg'); figure(1); imshow(x); x=rgb2gray(x); figure(2); imshow(x); h=figure(2);
saveas(h,'gray.jpg');
保存的图像
5、结合自身研究方向,自拟一题目,采用MATLAB语言实现一具有完整功能的算法,给出运行结果和执行代码。
题目:增量式PID控制算法仿真
clear all
clc
ts=0.001;
sys=tf(50,[0.125,7, 0]); %传递函数
dsys=c2d(sys,ts,'z'); %离散化
[num,den]=tfdata(dsys,'v'); %获得分子分母矩阵
u_1=0.0;u_2=0.0;
y_1=0.0;y_2=0.0;
x=[0,0,0]';
error_1=0;
error_2=0;
for k=1:1:1000
time(k)=k*ts;
S=1;
if S==1
kp=5;ki=0.2;kd=6.5;
% kp=10;ki=0.1;kd=15;
rin(k)=1; %Step Signal elseif S==2
kp=10;ki=0.1;kd=15; %Sine Signal
rin(k)=0.5*sin(2*pi*k*ts);
end
du(k)=kp*x(1)+kd*x(2)+ki*x(3); %PID Controller
u(k)=u_1+du(k);
%Restricting the output of controller
if u(k)>=5
u(k)=5;
end
if u(k)<=-5
u(k)=-5;
end
%Linear model
yout(k)=-den(2)*y_1-den(3)*y_2+num(2)*u_1+num(3)*u_2;
error(k)=rin(k)-yout(k);
%Return of parameters
u_2=u_1;u_1=u(k);
y_2=y_1;y_1=yout(k);
x(1)=error(k)-error_1; %Calculating P
x(2)=error(k)-2*error_1+error_2; %Calculating D
x(3)=error(k); %Calculating I
error_2=error_1; error_1=error(k); end figure(1);
plot(time,rin,'b',time,yout,'r'); xlabel('time(s)'),ylabel('rin,yout'); figure(2); plot(time,error,'r')
xlabel('time(s)');ylabel('error');
0.1
0.2
0.3
0.4
0.50.6
0.7
0.8
0.9
1
0.20.40.60.81
1.21.41.6time(s)
r i n ,y o u t
00.10.20.30.4
0.50.60.70.80.91
-0.6
-0.4-0.200.20.4
0.60.81time(s)
e r r o r
输入输出图波形 增量值波形