1 MATLAB的简介
MATLAB 是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。
MATLAB是矩阵实验室(Matrix Laboratory)的简称,和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完相同的事情简捷得多,并且mathwork也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。在新的版本中也加入了对C,FORTRAN,C++ ,JAVA的支持。可以直接调用,用户也可以将自己编写的实用程序导入到MATLAB函数库中方便自己以后调用,此外许多的MATLAB爱好者都编写了一些经典的程序,用户可以直接进行下载就可以用。
MATLAB 产品族可以用来进行以下各种工作:
● 数值分析
● 数值和符号计算
● 工程与科学绘图
● 控制系统的设计与仿真
● 数字图像处理
● 数字信号处理
● 通讯系统设计与仿真
● 财务与金融工程
MATLAB 的应用范围非常广,包括信号和图像处理、通讯、控制系统设计、测试和测量、财务建模和分析以及计算生物学等众多应用领域。附加的工具箱扩展了 MATLAB 环境,以解决这些应用领域内特定类型的问题。
2 具体题目分析总结
2.1 计算y1=和y2=;
2.1.1 理论分析
这是利用MATLAB处理数值运算的题目。其中要用到cos( )、sqrt( )等函数。
2.1.2 程序代码与运行结果
>> y1=20*cos(0.5*pi)/(2+sqrt(3)) %计算y1的表达式
y1 =
3.2814e-016 %y1的计算结果
>> y2=5*cos(0.4*pi)/(4+sqrt(3)) %计算y2的表达式
y2 =
0.2696 %y2的计算结果
2.1.3 总结
MATLAB中的pi与真正的有差距,而且数字与因式相乘要使用乘法符号‘*’,通过这个计算了解到MATLAB的数值计算功能。
2.2 绘制函数在时的曲线。
2.2.1 理论分析
利用MATLAB软件绘制曲线图。在此要用到plot命令及exp( )函数。
2.2.2 程序代码与运行结果
>> x=0:0.01:1; %自变量x的范围
>> y=x.*exp(-x); %y的表达式
>> plot(x,y,'r'); %画出图形
>> xlabel('x'); %横坐标标注
>> ylabel('x'); %纵坐标标注
>> title('函数y=e.*exp(-x)') %标题
运行结果如图2-1:
图2-1 函数曲线图
2.2.3 总结
plot命令可以很方便的画出所需区域的函数图像。同时可以用’xlabel’、’ylabel’、’title’等给坐标轴进行标注和给图形添加标题。使用函数时注意运算符是矩阵元素乘法运算符’.*’。
2.3 用图形表示离散函数。
2.3.1 理论分析
这道题要用到plot()函数来描点。其中还要用到绝对值函数abs(),绘制坐标网络命令。
2.3.2 程序代码与运行结果
>> n=0:12; %自变量n的范围
>> y=1./abs(n-6); %计算相应点的函数值y
Warning: Divide by zero. %有为0的分母,警告
>> plot(n,y,'r*','MarkerSize',10) %画出图形,标出各点
>> axis([0,12,0,2]) %确定x,y轴范围
>> grid on %画坐标网格
运行结果如图2-2:
图2-2 离散函数图
2.3.3 总结
描点时出现“Warning: Divide by zero.”,说明除法的分母出现零的情况
2.4 分析下面每条指令的功能并运行,观察执行结果。
(1) X=0:0.25:3;
Y=X.*exp(-X);
plot(X,Y),xlabel(‘x’), ylabel(‘y’),title(‘y=x*exp(-x)’);
(2) A=zeros(3,5)
A(:)=-4:10
L=abs(A)>4
islogical(L)
X=A(L)
(3) A=[1:5;6:10]
pow2(A)
(4) A=zeros(3,2)
A(:)=1:6
A=A*(1+i)
A1=A.’
B1=A’
(5) A=ones(2,3)
B=ones(2)
C=eye(4)
D=diag(C)
E=repmat(C,1,3)
2.4.1 分析、运行及结果
(1) 其功能是使用plot()函数画函数图
>> X=0:0.25:3; %定义向量X及其范围
>> Y=X.*exp(-X); %函数Y的表达式
>> plot(X,Y),xlabel('x'),ylabel('y'),title('y=x*exp(-x)');
%画出函数图,并标注,添加标题
其结果如图2-3:
图2-3 函数y=x*exp(-x)图
(2) 本题考察矩阵的操作
>> A=zeros(3,5) %定义一个3x5的全零矩阵
A =
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
>> A(:)=-4:10 %将元素-4到10按列赋值给A
-4 -1 2 5 8
-3 0 3 6 9
-2 1 4 7 10
>> L=abs(A)>4 %绝对值大于4的元素变为1,否则为0
L =
0 0 0 1 1
0 0 0 1 1
0 0 0 1 1
>> islogical(L) %判断L是不是逻辑数
ans =
1
>> X=A(L) %取出A中绝对值大于4的元素
X =
5
6
7
8
9
10
(3) 本题考察指数函数pow2()的使用
>> A=[1:5;6:10] %生成一个矩阵
A =
1 2 3 4 5
6 7 8 9 10
>> pow2(A) %相应元素的值变成以2为底的指数
ans =
2 4 8 16 32
64 128 256 512 1024
(4) 本题考察矩阵的乘法和转秩用法
>> A=zeros(3,2) %生成一个3x2的全零矩阵
A =
0 0
0 0
0 0
>> A(:)=1:6 %将1到6按列赋给矩阵的各元素
A =
1 4
2 5
3 6
>> A=A*(1+i) %矩阵A各元素乘以(1+i)
A =
1.0000 + 1.0000i 4.0000 + 4.0000i
2.0000 + 2.0000i 5.0000 + 5.0000i
3.0000 + 3.0000i 6.0000 + 6.0000i
>> A1=A.' %A的转置矩阵
A1 =
1.0000 + 1.0000i 2.0000 + 2.0000i 3.0000 + 3.0000i
4.0000 + 4.0000i 5.0000 + 5.0000i 6.0000 + 6.0000i
>> B1=A' %A的共轭转置矩阵
B1 =
1.0000 - 1.0000i 2.0000 - 2.0000i 3.0000 - 3.0000i
4.0000 - 4.0000i 5.0000 - 5.0000i 6.0000 - 6.0000i
(5) 本题考察使用函数对特殊矩阵的构造
>> A=ones(2,3) %定义一个2X3的元素全为1的矩阵
A =
1 1 1
1 1 1
>> B=ones(2) %定义一个2X2的元素全为1的矩阵
B =
1 1
1 1
>> C=eye(4) %定义一个4阶单位矩阵
C =
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
>> D=diag(C) %得到矩阵C的主对角元素
D =
1
1
1
1
>> E=repmat(C,1,3) %复制矩阵C得到1X3个C的大矩阵
E =
1 0 0 0 1 0 0 0 1 0 0 0
0 1 0 0 0 1 0 0 0 1 0 0
0 0 1 0 0 0 1 0 0 0 1 0
0 0 0 1 0 0 0 1 0 0 0 1
2.5 计算在x=0.1与10处的值。
2.5.1 理论分析
这道题目是运用MATLAB计算多项式。这里运用到的是polyval()函通过polyval()函数可以很快的计算出在相应值下的多项式的值。
2.5.2 程序代码与运行结果
>> y=[2 0 0.1 0 0 -10] %用行向量表示多项式
y =
2.0000 0 0.1000 0 0 -10.0000
>> y1=polyval(y,0.1) %计算x=0.1时多项式的值
y1 =
-9.9999
>> y2=polyval(y,10) %计算x=10时多项式的值
y2 =
200090
2.5.3 总结
MATLAB采用行向量来表示多项式,将多项式的系数按降幂次序放在行向量中,但要注意多项式中缺少的幂次要用“0”补齐。MATLAB使用函数polyval()来计算多项式的值。
2.6 求函数,n =100的值。
2.6.1 理论分析
本题可使用MATLAB的符号计算功能并运用函数symsum对符号表达式进行求和。
2.6.2 程序代码与运行结果
>> syms n %定义符号变量n
>> s=1/n^3 % s的表达式
s =
1/n^3
>> s1=symsum(s,n,1,100) %求n从1到100的s值求和得s1的精确值
s1 =
81473483330743503583074181861672511931518122336172216406894149391331289704097519580221863303145356050828007873151451209887/677811827830924958486563450918440215717341906309145902293321613799502571708280980311029502647691786525566601429540864
>> double(s1) %得到s1的双精度型数值
ans =
1.2020
2.6.3 总结
在计算级数和的过程中,注意要先定义变量,否则将不会得到最终结果。会出现 Undefined function or variable 'n'.需要用syms()将‘n'符号化。注意符号计算过程得到的结果不会出现舍入误差,可用double()函数得到双精度型数据。
2.7 求1500个元素的随机数向量A中大于0.5的元素个数。
2.7.1 理论分析
本题先用矩阵函数rand()产生随机向量,并用循环语句求得符合条件的元素的个数。
2.7.2 程序代码与运行结果
>> A=rand(1,1500); %产生1x1500的0-1的随机向量
>> n=0 %符合条件的元素个数
n =
0
>> for i=1:1500 %for循环求A中大于0.5的元素个数
if A(i)>0.5
n=n+1;
end
end
>> n %输出符合条件元素的个数
n =
759
2.7.3 总结
for循环中嵌套有if语句,使用时注意“end”的个数,if与end各对应一个“end”。由于rand()函数产生随机数,每次产生的向量都不相同。
2.8 用图形表示连续调制波形,运行下面的程序,观察结果,并简单说明。
t1=(0:11)/11*pi; y1=sin(t1).*sin(9*t1);
t2=(0:100)/100*pi; y2=sin(t2).*sin(9*t2);
subplot(2,2,1),plot(t1,y1,'r.'),axis([0,pi,-1,1]),title('子图 (1)')
subplot(2,2,2),plot(t2,y2,'r.'),axis([0,pi,-1,1]),title('子图 (2)')
subplot(2,2,3),plot(t1,y1,t1,y1,'r.')
axis([0,pi,-1,1]),title('子图 (3)')
subplot(2,2,4),plot(t2,y2)
axis([0,pi,-1,1]),title('子图 (4)')
2.8.1 理论分析
本题考察subplot()、plot()及axis()等绘图函数的用法,并使用title()添加标题。
2.8.2 程序代码与运行结果
>> t1=(0:11)/11*pi; %定义一组自变量t1,间隔为1/11
y1=sin(t1).*sin(9*t1); %y1的表达式,数组元素对应相乘
t2=(0:100)/100*pi; %定义一组自变量t2,间隔为1/100
y2=sin(t2).*sin(9*t2); %y2的表达式
>> subplot(2,2,1),plot(t1,y1,'r.'),axis([0,pi,-1,1]),title('子图(1)') %将窗口分为四个,描点
%控制x,y轴的取值范围,添加标题
>> subplot(2,2,2),plot(t2,y2,'r.'),axis([0,pi,-1,1]),title('子图(2)') %将窗口分为四个,当前为第2个
%将点描到坐标图上
%控制x,y轴的取值范围
%添加标题
>> subplot(2,2,3),plot(t1,y1,t1,y1,'r.')
%当前第3个窗口,描点并画线
>> axis([0,pi,-1,1]),title('子图 (3)')
%控制x,y轴取值范围,添加标题
>> subplot(2,2,4),plot(t2,y2) %当前第4个窗口,画线
>> axis([0,pi,-1,1]),title('子图(4)')
%控制x,y轴取值范围,添加标题
运行结果如图2-4:
图2-4 连续调制波形图
2.8.3 总结
subplot()函数可将窗口分为多个,plot()函数有多种绘图方式,可绘制不同的线型、点标和颜色的图形,axis()函数用于控制坐标轴的刻度范围。
2.9 计算下列矩阵A正交阵 。
2.9.1 理论分析
这里是运用matlab中的函数来处理矩阵,从而生成所需要的矩阵。这里所用到的函数为orth()。
2.9.2 程序代码与运行结果
>> A=[1 1 4;2 2 5;3 3 6] %定义矩阵A
A =
1 1 4
2 2 5
3 3 6
>> Q=orth(A) %求A得正交矩阵Q
Q =
-0.4080 0.8166
-0.5633 0.1268
-0.7185 -0.5631
2.9.3 总结
在MATLAB中有很多很方便的函数帮助我们处理数据。我们要时常注意相关的函数,在以后的数据处理中就显得很轻松了。
2.10用FFT直接计算x=3sin(2*pi*50*t)+2cos(2*pi*120*t)+ w(t)的功率谱。
2.10.1 理论分析
本题利用fft()函数求傅里叶变换,调用方法X=fft(x);X=fft(x,N)。并用plot()画出功率谱。
2.10.2 程序代码与运行结果
>> fs=1000; %采样频率
t=0:1/fs:0.25; %时间序列,样本长度0.25s
N=256; %元素个数,为2的幂次
x_noise=randn(size(t)); %加入噪音信号
x=3*sin(2*pi*50*t)+2*cos(2*pi*120*t)+x_noise;
%信号
Y=fft(x,N); %对信号进行快速fourier变换
mag=abs(Y); %求得Fourier变换后的振幅
f=(0:N/2-1)*fs/N; %使频率轴从零开始
>> plot(f,mag(1:N/2)) %画出频谱图
>> xlabel('频率/Hz');ylabel('振幅');title('功率谱');
%添加标注及标题
运行结果如图2-5 :
图2-5: x=3sin(2*pi*50*t)+2cos(2*pi*120*t)+w(t)功率谱
2.10.3 总结
一般说来利用fft只是对已有数据进行傅里叶变换,而具体应用到画图还要经过处理,如对已知数据x进行fft傅里叶变换只需运行:y=fft(x);注意w=randn( ); %加入噪音信号。
3 课程设计心得
通过本次课程设计,我了解了MATLAB强大的数值计算功能。初步了解了
MATLAB、熟悉了MATLAB界面,并能进行其计算及绘图操作;能够使用MATLAB创建矩阵、矩阵运算、多项式运算、线性方程组、数值统计;能进行简单的信号处理。
这是我第一次进行课程设计并撰写课程设计说明书,通过这次课程设计,我了解了课程设计的步骤,并熟悉了课程设计说明书的撰写要求和其工作规范,了解了它的统一书写格式,为以后的其他课程设计及相关的内容打下了基础。
设计过程中,用到了MATLAB的数值处理运算功能。用到了cos()、sqrt()函数来进行数值处理,使用过程中,了解到MATLAB中可以用pi来表示圆周率,注意MATLAB中的pi与真正的有差距,且数字与因式相乘要使用乘法符号‘*’。另外还有指数函数pow2()的使用,表示以2为底的指数。MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,因此用MATLAB来解算问题要比C言处理相同的问题简捷得多。本次课程设计中,我使用的是MATLAB7.0版本,可以使用C语言语句在软件中运行,C语言中的顺序、选择、循环结构都能在MATLAB中得到体现,如设计题中用for循环并嵌套if语句来求符合条件的元素。使用过程中,注意for与if语句各要对应一个“end”,否则无法正常运行而得不到正确的结果。矩阵构造函数rand()可以产生随机向量,且由于rand()函数产生的是随机数,每次产生的向量都是不相同的。
另外,设计过程中用到了MATLAB的绘图功能。MATLAB中有方便的plot()绘图函数,plot()函数可以很方便的画出所需区域的函数图象。而subplot()函数可将窗口分为多个。可用‘xlabel’、‘ylabel’、‘title’等给坐标轴进行标注和给图形添加标题。而函数axis()用于控制坐标轴的刻度范围及显示形式。
MATLAB中有很多方便的函数帮助我们处理数据,要时常注意相关的函数,在以后的数据处理中就显得很轻松了。MATLAB可以进行信号处理,用fft()函数求傅里叶变换,并用绘图功能绘出信号的频谱图。MATLAB用函数polyval()函数来计算多项式的值,且用行向量来表示多项式,将多项式的系数按降幂
次序放在行向量中,其缺少的幂次用“0”补齐。另外syms()函数定义符号变量,double()函数可得到结果的双精度型数据。
通过这次课程设计,我初步掌握了MATLAB这个数值计算及绘图工具的使用,掌握了一项课程学习中强大的工具,为以后更深层次的学习打下了基础。通过这次课程设计,我受益匪浅。
4 参考文献
[1] 张立科,MATLAB7.0从入门到精通,人民邮电出版社,2006
[2] 胡辰浩,MATLAB7.0基础教程,清华大学出版社,2005
[3] 吴传生,王卫华,曾祥金,经济数学线性代数,高等教育出版社,2009
[4] 陈怀琛,吴大正,高西全,MATLAB及在电子信息课程中的应用(第3版),电子工业出版社,2008
[5] 穆尔,高会生,刘童娜,李聪聪,MATLAB实用教程,电子工业出版社,2010
5本科生课程设计成绩评表
本科生课程设计成绩评定表
指导教师签字:
年 月 日