一、课程目的
初步学会使用MATLAB软件,掌握MATLAB基本的函数的使用,熟练MATLAB编程,以便为今后数字信号的处理打下基础。
二、 课程内容
实验一 MATLAB语言基础
实验目的:基本掌握 MATLAB 向量、 矩阵、 数组的生成及其基本运算(区分数组运算和矩阵运算)、常用的数学函数。了解字符串的操作。
实验内容:
1、创建以下矩阵:A为3×4的全 1 矩阵、B为3×3的0矩阵、C为3×3的单位阵、D为3×3的魔方阵、E由C和D纵向拼接而成、F抽取E的2~5行元素生成、G由F经变形为3×4的矩阵而得、以G为子矩阵用复制函数(repmat)生成6×8的大矩阵H。
源程序:
A=ones(3,4)% A为3×4的全 1 矩阵
B=zeros(3)% B为3×3的0矩阵
C=eye(3)% C为3×3的单位阵
D=magic(3)% D为3×3的魔方阵
E=cat(1,C,D)% E由C和D纵向拼接而成
F=E(2:5,:)% F抽取E的2~5行元素生
G=reshape(F,3,4)% G由F经变形为3×4的矩阵而得
H=repmat(G,2,2) %以G为子矩阵用复制函数(repmat)生成6×8的大矩阵H
运行结果:
A =
1 1 1 1
1 1 1 1
1 1 1 1
B =
0 0 0
0 0 0
0 0 0
C =
1 0 0
0 1 0
0 0 1
D =
8 1 6
3 5 7
4 9 2
E =
1 0 0
0 1 0
0 0 1
8 1 6
3 5 7
4 9 2
F =
0 1 0
0 0 1
8 1 6
3 5 7
G =
0 3 1 1
0 1 5 6
8 0 0 7
H =
0 3 1 1 0 3 1 1
0 1 5 6 0 1 5 6
8 0 0 7 8 0 0 7
0 3 1 1 0 3 1 1
0 1 5 6 0 1 5 6
8 0 0 7 8 0 0 7
2、(1)用矩阵除法求下列方程组的解 x=[x1;x2;x3];
(2) 求矩阵的秩;
(3) 求矩阵的特征值与特征向量;
(4) 矩阵的乘幂与开方;
(5) 矩阵的指数与对数;
(6) 矩阵的提取与翻转。
源程序:
a=[6,3,4;-2,5,7;8,-1,-3]%系数矩阵
b=[3;-4;-7]
x=a\b%线性方程的解
c=rank(x)%矩阵的秩
[X,Lamda]=eig(a)%矩阵方程的特征值和特征向量
d=a^3%系数矩阵的3次幂
e=sqrtm(a)%x系数矩阵开方
f=expm(a)%系数矩阵的指数
g=logm(a)%系数矩阵的对数
h=triu(a)%提取系数矩阵右上三角的元素,其余元素补零
i=tril(a)%提取系数矩阵左上三角的元素,其余元素补零
j=diag(a)%提取系数矩阵的对角线上的元素
k=flipud(a)%系数矩阵a沿水平轴上下翻转
l=fliplr(a)%系数矩阵a沿垂直轴轴左右翻转
m=flipdim(a,1)%按行定维翻转
n=flipdim(a,2)%按列定维翻转
o=rot90(a)%矩阵整体逆时针翻转90°
运行结果:
a =
6 3 4
-2 5 7
8 -1 -3
b =
3
-4
-7
x =
1.0200
-14.0000
9.7200
c =
1
X =
0.8013 -0.1094 -0.1606
0.3638 -0.6564 0.8669
0.4749 0.7464 -0.4719
Lamda =
9.7326 0 0
0 -3.2928 0
0 0 1.5602
d =
578 298 352
228 156 202
384 154 156
e =
2.2447 + 0.2706i 0.6974 - 0.1400i 0.9422 - 0.3494i
-0.5815 + 1.6244i 2.1005 - 0.8405i 1.7620 - 2.0970i
1.9719 - 1.8471i -0.3017 + 0.9557i 0.0236 + 2.3845i
f =
1.0e+004 *
1.0653 0.5415 0.6323
0.4830 0.2465 0.2876
0.6316 0.3206 0.3745
g =
1.7129 + 0.4686i 0.5305 - 0.2425i 0.5429 - 0.6049i
1.1938 + 2.8123i 0.3658 - 1.4552i -0.5514 - 3.6305i
-0.0748 - 3.1978i 0.7419 + 1.6546i 1.8333 + 4.1282i
h =
6 3 4
0 5 7
0 0 -3
i =
6 0 0
-2 5 0
8 -1 -3
j =
6
5
-3
k =
8 -1 -3
-2 5 7
6 3 4
l =
4 3 6
7 5 -2
-3 -1 8
m =
8 -1 -3
-2 5 7
6 3 4
n =
4 3 6
7 5 -2
-3 -1 8
o =
4 7 -3
3 5 -1
6 -2 8
实验二 MATLAB数值运算
实验目的:掌握 MATLAB 的数值运算及其运算中所用到的函数,掌握结构数组的操作。
实验内容:
1、求的“商”及“余”多项式。
源程序:
a=[1,0,1];
b=[1,3];
c=[1,1];
p1=conv(a,conv(b,c));
p2=[3,0,2,1];
[q,r]=deconv(p1,p2) %求矩阵的商和余
运行结果:
q =
0.3333 1.3333
r =
0 0 3.3333 1.0000 1.6667
2、图1是瑞士地图,为了算出其国土面积,首先对地图作如下测量:以由西向东方向为X轴,由南到北方向为Y轴,选择方便的原点,并将从最西边界点到最东边界点在X轴上的区间适当划分为若干段,在每个分点的Y方向测出南边界点和北边界点的Y坐标Y1和Y2,这样就得到了表1,根据地图比例尺知道18 mm相当于40 km,试由测量数据计算瑞士国土近似面积,与其精确值 41228 km2比较。
图1 瑞士地图(单位 mm)。
表1 瑞士地图坐标
源程序:
x=(40/18)*[7,10.5,13,17.5,34,40.5,44.5,48,56,61,68.5,76.5,80.5,91,96,101,104,106.5,111.5,118,123.5,136.5,142,146,150,157,158];
y1=(40/18)*[44,45,47,50,50,38,30,30,34,36,34,41,45,46,43,37,33,28,32,65,55,54,52,50,66,66,68];
y2=(40/18)*[44,59,70,72,93,100,110,110,110,117,118,116,118,118,121,124,121,121,121,116,122,83,81,82,86,85,68];
p=diff(x);
q=y2-y1;
r=q(2:27);
s=r';
area=p*s%瑞士国土面积
运行结果:
area =
4.2237e+004
实验三 MATLAB符号运算
实验目的:掌握符号变量和符号表达式的创建, 掌握MATLAB的symbol工具箱的一些基本应用。
实验内容:
1、(1) 已知 ,按照自变量x和自变量a,对表达式f分别进行降幂排列。
源程序:
syms x a b c ;%定义符号变量
f=(a*x^2+b*x+c-3)^3-a*(c*x^2+4*b*x-1)
fx=collect(f)%对f按x的降幂排列
fa=collect(f,a)%对f按a的降幂排列
运行结果:
f =
(a*x^2+b*x+c-3)^3-a*(c*x^2+4*b*x-1)
fx =
a^3*x^6+3*b*a^2*x^5+((c-3)*a^2+2*b^2*a+a*(2*(c-3)*a+b^2))*x^4+(4*(c-3)*b*a+b*(2*(c-3)*a+b^2))*x^3+((c-3)*(2*(c-3)*a+b^2)+2*b^2*(c-3)+a*(c-3)^2-a*c)*x^2+(3*(c-3)^2*b-4*b*a)*x+(c-3)^3+a
fa =
a^3*x^6+3*(b*x+c-3)*x^4*a^2+(3*(b*x+c-3)^2*x^2-c*x^2-4*b*x+1)*a+(b*x+c-3)^3
(2) 已知符号表达式,,计算x=0.5时,f的值;计算复合函数f(g(x))。
源程序:
syms x;%定义符号变量x
f=1-sin(x)^2
g=2*x+1
f1=subs(f,'0.5')%利用符号替换函数求f的解析解
answ=vpa(f1,6)%用可变精度转换函数将解析解转换成6位精的数值解
fg=compose(f,g)%求f(g(x))
运行结果:
f =
1-sin(x)^2
g =
2*x+1
f1 =
1-sin((0.5))^2
answ =
.770151
fg =
1-sin(2*x+1)^2
2、(1) 求 。
源程序:
syms x%定义符号变量
ans=limit((x^2-1)/(x^2-3*x+1),x,2)%求函数在2的极限
运行结果:
ans =
-3
(2) 求函数 f(x)= cos 2x -sin 2x的积分;求函数的导数。
源程序:
syms x%定义符号变量
ans1=int(cos(2*x)-sin(2*x))%求不定积分
pretty(ans1)%改写成习惯性的数学表达式
ans2=diff((exp(x)+x*sin(x))^(1/2))%求微分
pretty(ans2)%改写成习惯性的数学表达式
运行结果:
ans1 =
1/2*sin(2*x)+1/2*cos(2*x)
1/2 sin(2 x) + 1/2 cos(2 x)
ans2 =
1/2/(exp(x)+x*sin(x))^(1/2)*(exp(x)+sin(x)+x*cos(x))
exp(x) + sin(x) + x cos(x)
1/2 --------------------------
1/2
(exp(x) + x sin(x))
(3) 计算定积分
源程序:
syms x%定义符号变量
answ=int((sin(x)+2),0,pi/6)%定积分
pretty(answ)
运行结果:
answ =
-1/2*3^(1/2)+1/3*pi+1
1/2
- 1/2 3 + 1/3 pi + 1
(4) 求下列线性代数方程组的解。
源程序:
syms x y z%定义变量
L1='x+y+z-10'%线性方程
L2='3*x+2*y+z-14'%线性方程
L3='2*x+3*y-z-1'%线性方程
[x,y,z]=solve(L1,L2,L3,x,y,z)%线性方程的解
运行结果:
L1 =
x+y+z-10
L2 =
3*x+2*y+z-14
L3 =
2*x+3*y-z-1
x =
1
y =
2
z =
7
(5) 求解当y(0)=2,z(0)=7时,微分方程组的解。
源程序:
[y,z]=dsolve('Dy-z=sin(x)','Dz+y=1+x','y(0)=2,z(0)=7','x')%微分方程特解
pretty(y)%习惯数学形式
pretty(z)%习惯数学形式
运行结果:
y =
cos(x)+6*sin(x)+1/2*sin(x)*x+1+x
z =
-3/2*sin(x)+6*cos(x)+1+1/2*cos(x)*x
cos(x) + 6 sin(x) + 1/2 sin(x) x + 1 + x
- 3/2 sin(x) + 6 cos(x) + 1 + 1/2 cos(x) x
实验四 MATLAB程序设计
实验目的:掌握MATLAB程序设计的主要方法,熟练编写MATLAB函数。
实验内容:
1、用π /4≈1-1/3+1/5-1/7+…公式求π的近似值,直到最后一项的绝对值小于10-6
为止,试编写其M脚本文件。
源程序:
%首先设定需要的变量
t=1; %t表示计算式括号中的各项
pi=0; %pi代表圆周率,先置0
n=1; %n为表示分母的变量
s=1;%变量s用正负娄的改变,控制“+、-”的转换
while abs(t)>1e-7 %"t的绝对值大于10的-7次方"为循环条件
pi=pi+t;
n=n+2;
s=-s;
t=s/n;
end
pi=pi*4;
fprintf('pi=%f\n',pi)%输出结果
运行结果:
pi=3.141592
2、编写求矩形面积函数rect,当没有输入参数时,显示提示信息;当只输入一个参数时,则以该参数作为正方形的边长计算其面积;当有两个参数时,则以这两个参数为长和宽计算其面积。
源程序:
function s=rect(w,p)%求面积的函数
if nargin==0
error('no input')
elseif nargin==1
p=w;
s=w*p;
elseif nargin>2
error('too mangy input')
else
s=w*p;
end
执行:
rect()
输出:
??? Error using ==> rect
no input
执行:
rect(7.6)
输出:
ans =
57.7600
执行:
rect(7,8)
输出:
ans =
56
执行:
rect(15,12,3)
输出:
??? Error using ==> rect
Too many input arguments.
实验五、MATLAB数据可视化
实验目的:掌握MATLAB二维图形绘制,掌握图形属性的设置和图形修饰;掌握图像文件的读取和显示。
实验内容:
图2
写出图2的绘制源程序。按照以下的步骤进行(1)产生曲线的数据(共有3组数据);(2)选择合适的线形、标记、颜色(正弦曲线为红色,余弦曲线为紫色);(3)添加图例及文字说明信息;(4)添加坐标轴说明与图标题。
源程序:
x=0:.1:12.5;
y1=sin(pi/6*x);
y2=cos(pi/6*x);
plot(x,y1,'r--',x,y2,'m'); %绘制sin(x)和cos(x)曲线
axis([0,16,-1,1]); %改变图中坐标值范围
xlabel('时间'); %标记x轴
ylabel('幅值'); %标记y轴
legend('sin(x)','cos(x)'); %线型注释
title('正余弦曲线');%标题
运行结果:
一、 课程设计体会
本次MATLAB课程设计确实让我学会了许多,让我们见识了MATLAB作为科学计算工具,在数值计算、数值和符号计算、科学绘图、数字信号处理技术等方面的强大,MATLAB说难又不是很难,说容易不像想象中的那么容易。就像C语言一样,MALALB有它自己的语言,要全面而熟练的掌握它的语言,这短短的几天远远不够。在这几天的MATLAB课程设计中,我遇到了不少问题,也解决了不少问题,更重要的是明白了不少。以前用笔算得头晕脑胀的计算题,在MATLAB眼中不过是小儿科而已,不用1s结果就能出现在我们的面前,这多么强大啊,我想我们人脑要有有这么强的能力该有多好。 我真的感叹这么高级的工具是人类智慧的结晶。