一、实验目的
1、会安装、启动、退出Matlab系统
2、熟悉Matlab 软件环境,对向量、数组和矩阵处理的基本方法 3、会使用Matlab作图
4、会简单编程和 m 文件的使用
二、实验要求
熟悉Matlab系统的运行环境、掌握该系统的一些基本符号运算与数值计算,掌握Matlab函数的定义及Matlab的作图的一些基本命令;能地运用命令作图并学会循环、选择控制结构编程调试。
三、实验内容 1、启动方法:
a、点击开始菜单条的程序,再点击matlab菜单条中的matlab6.5 b、双击桌面上图标 2、退出
只需点击系统菜单条右上角的关闭按钮或点击系统菜单条的File菜单条中的Exit项。
3、matlab系统的输入、执行,可在Command Windows窗口中进行或在编辑窗口也能输入、运行程序,不过运行的结果仍出现在命令窗口。命令窗口按回车键运行,编辑窗口先选中程序,再右击鼠标选第一个命令。 4、主要命令和注意事项: 一)变量与函数
1)MATLAB中变量的命名规则是:
(1)变量名必须是不含空格的单个词; (2)变量名区分大小写;
(3)变量名最多不超过31个字符;
(4)变量名必须以字母打头,之后可以是任意字母、数字或下划线,变量名中不允许使用标点符号.
系统预定义的永久变量 Ans Eps Pi Inf NaN 生 i 或 j 虚数单位i=j=(-1)^(1/2) 系统预设的计算结果的变量名 容差变量,定义为1.0到最近的浮点数的距离 内建的π值 正无穷 ( 1/0) 非数(Not a Number),由Inf/inf或者0/0产 2)数学函数
一些常用的数学函数如下表所示: 函 数 sin(x) cos(x) tan(x) abs(x) min(x) sqrt(x) log(x) sign(x) 名 称 正弦函数 余弦函数 正切函数 绝对值 最小值 开平方 自然对数 符号函数 函 数 asin(x) acos(x) atan(x) max(x) sum(x) exp(x) 名 称 反正弦函数 反余弦函数 反正切函数 最大值 元素的总和 以e为底的指数 以10为底的对数 取整 log10(x) fix(x) 还有如: length(长度); mean(平均值); median(中间值);prod(乘积); sort(从小到大排序)round(四舍五入取整); floor(向-1方向取整); ceil(向+1方向取整); real(取实部); imag(取虚部);angle(取辐角);rats(有理逼近) 二)矩阵及其运算 1) 矩阵的建立
逗号或空格用于分隔某一行的元素,分号用于区分不同的行. 除了分号,在输入矩阵时,按Enter键也表示开始一新行. 输入矩阵时,严格要求所有行有相同的列.
例 m=[1 2 3 4 ;5 6 7 8;9 10 11 12] p=[1 2 3 4 5 6 7 8 9 10 11 12]
注:中括号括起的表明是矩阵,一般的表达多用小括号。 特殊矩阵的建立:
a=[ ] 产生一个空矩阵,空矩阵的大小为零. b=zeros(m,n) 产生一个m行、n列的零矩阵
c=ones(m,n) 产生一个m行、n列的元素全为1的矩阵 d=eye(m,n) 产生一个m行、n列的单位矩阵 rand(m,n) 生成m×n均匀分布的随机阵 randn(m,n) 生成m×n正态分布的随机矩阵
H=hilb(n) 生成n阶Hilbert矩阵,其中[H]i,j=1
ij1Magic(n) 产生维数维n×n的魔方阵(各个行、列及两对角线的元素
和相等)
2) 对矩阵元素的操作
A(:) 逐列提取A中的所有元素作为一个列向量。 A(i) 把A看作列向量A(:),提取其中第i个元素。 A(r, c) 提取A中第r行和第c列所定义的A的元素。 A(r, :) 提取A中第r行所有列所构成的A的子数组。 A(:, c) 提取A中第c列所有行所构成的A的子数组。 A(i1:i2, j1:j2) 提取矩阵A的第i1至i2行、第j1至j2列构成新矩阵 A(i2:-1:i1,:) 以逆序提取矩阵A的第i1至i2行,构成新矩阵 A(:, j2:-1:j1 ) 以逆序提取矩阵A的第j1至j2列,构成新矩阵 A(i1:i2,:)=[ ] 删除A的第i1至i2行,构成新矩阵 A(:, j1:j2)=[ ] 删除A的第j1至j2列,构成新矩阵
[A B];[A;B] 将矩阵A和B拼接成新矩阵,前者为左右拼接,行数要
相等,
后者为上下拼接,列数要相等。
3) 矩阵的运算
(1).四则运算
矩阵的加、减、乘运算符分别为“+,—,*” ,用法与数字运算几乎相同,但计算时要满足其数学要求(如:同型矩阵才可以加、减)。
在MATLAB中矩阵的除法有两种形式:左除“\\”和右除“/”。 若A是可逆矩阵,AX=B的解是A左除B,即X=A\\B; XA=B的解是A右除B,即X=B/A。 (2).与常数的运算
常数与矩阵的运算即是同该矩阵的每一元素进行运算。但需注意进行数除时,常数通常只能做除数。
(3).基本函数运算
矩阵的函数运算是矩阵运算中最实用的部分,常用的主要有以下几个:
det(a) 求矩阵a的行列式
eig(a) 求矩阵a的特征值与特征向量 inv(a)或a ^ (-1) 求矩阵a的逆矩阵 rank(a) 求矩阵a的秩
trace(a) 求矩阵a的迹(对角线元素之和) 三)数组及其运算 1) 数组的建立
x=[a b c d e f ] 创建包含指定元素的数组 x=a:b
创建从a开始,加1计数,到b结束的等差数组 x=a:k:b
创建从a开始,加k计数,b结束的等差数组 注:k=1时可以省略不写,如第二种创建方式 x=linspace(a,b,n)
创建从a开始,到b结束,有n个元素的等差数组 x=logspace(a,b,n)
创建从10a开始,到10b结束,有n个元素的等比数组 2) 数组元素的访问
(1) 访问一个元素: x(i)表示访问数组x的第i个元素. (2) 访问一块元素: x(a :b :c)表示访问数组x的从第a个元素开始,
以步长为b到第c个元素(但不超过c),b可以为负数,b缺损时为1.
(3) 直接使用元素编址序号. x([a b c d]) 表示提取数组x的第a、b、c、d个元素构成一个新的数组[x(a) x(b) x(c) x(d)]. 3) 数组的运算
数组的运算符为加(+)、减(-)、点乘(.*)、点除(./)、和点乘方运算 (.^) (1) 标量——数组运算
数组对标量的加、减、乘、除、乘方是数组的每个元素对该标量施加相应的加、减、乘、除、乘方运算.
设:a=[a1,a2,„,an], c=标量 则: a+c=[a1+c,a2+c,„,an+c] a.*c=[a1*c,a2*c,„,an*c]
a./c= [a1/c,a2/c,„,an/c] (右除) a.\\c= [c/a1,c/a2,„,c/an] (左除) a.^c= [a1^c,a2^c,„,an^c] c.^a= [c^a1,c^a2,„,c^an]
(2)数组——数组运算
当两个数组有相同维数时,加、减、乘、除、幂运算可按元素对元素方式进行的,不同大小或维数的数组是不能进行运算的. 设:a=[a1,a2,„,an], b=[b1,b2,„,bn]
则: a+b= [a1+b1,a2+b2,„,an+bn] a.*b= [a1*b1,a2*b2,„,an*bn] a./b= [a1/b1,a2/b2,„,an/bn] a.\\b=[b1/a1,b2/a2,„,bn/an] a.^b= [a1^b1,a2^b2,…,an^bn]
四)图形功能 1) 二维图形的绘制 plot(y) 当y为向量时,是以y的分量为纵坐标,以元素序号为横坐标,用直线依次连接数据点,绘制曲线。若y为实矩阵,则按列绘制每列对应的曲线,图中曲线数等于矩阵的列数。 >> y=[0 0.58 0.70 0.95 0.83 0.25]; >> plot(y) 生成的图形见图5-1,是以序号1,2,,6为横坐标、数组y的数值为纵坐标画出的折线。
plot(x,y) 若y和x为同维向量,则以x为横坐标,y为纵坐标绘制连线图。 >> x=linspace(0,2*pi,30); % 请同学讲解此语句的意思 >> y=sin(x); >> plot(x,y)
生成的图形见图5-2,是[0,2]上30个点连成的光滑的正弦曲线。
图5-1 图5-2 多重线
在同一个画面上可以画许多条曲线,只需多给出几个数组,例如
>> x=0:pi/15:2*pi; >> y1=sin(x); >> y2=cos(x); >> plot(x,y1,x,y2)
则可以画出图5-3。
多重线的另一种画法是利用hold命令。在已经画好的图形上,若设置hold on,MATLA将把新的plot命令产生的图形画在原来的图形上。而命令hold off 将结束这个过程。
例如:
>> x=linspace(0,2*pi,30); y=sin(x); plot(x,y)
先画好图5-2,然后用下述命令增加cos(x)的图形,也可得到图5-3。
>> hold on
>> z=cos(x); plot(x,z)
>> hold off %注意hold on与hold off的配对使用
10.80.60.40.20-0.2-0.4-0.6-0.8-101234567 图5-3 线型和颜色
线型 线方式: - 实线 :点线 -. 虚点线 - - 波折线。
数据点图标: . 圆点 +加号 * 星号 x x形 o 小圆 pentagram (五角星)。颜色: y黄; r红; g绿; b蓝; w白; k黑; m紫; c青. plot(x,y, 'color linestyle marker') 其中,color linestyle marker为一个字符串,由颜色、线型和数据点图标组成。 网格和标记 在一个图形上可以加网格、标题、x轴标记、y轴标记,用下列命令完成这些工作。
>> x=linspace(0,2*pi,30); y=sin(x); z=cos(x); >> plot(x,y,x,z)
>> grid %加网格
>> xlabel ('Independent Variable X') %加 x轴标记 >> ylabel ('Dependent Variables Y and Z') %加 y轴标记 >> title ('Sine and Cosine Curves') %加标题 它们产生图5-4:
Sine and Cosine Curves10.80.60.4Dependent Variables Y and Z0.20-0.2-0.4-0.6-0.8-101234Independent Variable X567 图5-4
也可以在图形的任何位置加上一个字符串,如用:
>> text (2.5,0.7,'sinx')
表示在坐标x=2.5, y=0.7处加上字符串sinx。
更方便的是用鼠标来确定字符串的位置,方法是输入命令: >> gtext ('cosx')
在图形窗口十字线的交点是字符串的位置,用鼠标点一下就可以将字符串放在那里。
坐标系的控制
axis([xmin xmax ymin ymax]) [ ]中分别给出x轴和y轴的最大值、最小值
axis equal 或 axis(‘equal’) x轴和y轴的单位长度相同 axis square 或 axis(‘square’) 图框呈方形
axis off 或 axis(‘off’) 清除坐标刻度 多幅图形
可以在同一个画面上建立几个坐标系, 用subplot (m,n,p) 命令;把一个画面分成m×n个图形区域, p代表当前的区域号,在每个区域中分别画一个图,如
>> x=linspace(0,2*pi,30); y=sin(x); z=cos(x); >> u=2*sin(x).*cos(x); v=sin(x)./cos(x);
>> subplot(2,2,1), plot(x,y), axis([0 2*pi -1 1]), title('sin(x)') %分成2×2个区域
>> subplot(2,2,2), plot(x,z), axis([0 2*pi -1 1]), title('cos(x)')
>> subplot(2,2,3), plot(x,u), axis([0 2*pi -1 1]), title('2sin(x)cos(x)')
>> subplot(2,2,4), plot(x,v), axis([0 2*pi -20 20]), title('sin(x)/cos(x)') 共得到4幅图形,见图5-6.
sin(x)11cos(x)0.50.500-0.5-0.5-10246-102462*sin(x)cos(x)120sin(x)/cos(x)0.51000-0.5-10-10246-200246 图5-6 2) 三维图形
三维曲线与等高线
plot3是空间曲线作图函数, 用法类似于plot。 例 作螺旋线 x=sint, y=cost, z=t 用以下程序实现:
>> t=0:pi/50:10*pi;
>> plot3 (sin(t),cos(t),t)
contour画出曲面等高线在XY平面的投影,contour3画出曲面在三维空间中的等高线,
如对上图的曲面, 在程序后接contour(X,Y,Z,10) 即可得到10条等高线。
Meshc(X,Y,Z)同时画出网状图与等高线,surfc(X,Y,Z)同时画出曲面图与等高线。
三维曲面
mesh和surf是三度空间立体绘图的基本命令,mesh可画出立体网状图,surf则可画出立体曲面图,两者产生的图形都会依高度而有不同颜色。
例 作曲面z=f(x,y)的图形
zsinx2y2xy22,7.5x7.5,7.5y7.5
用以下程序实现:
>>x= -7.5:0.5:7.5; y=x;
[X,Y]=meshgrid(x,y); % 3维图形的X,Y数组 R=sqrt(X.^2+Y.^2)+eps; % 加eps是防止出现0/0 Z=sin(R)./R;
mesh(X,Y,Z); % 3维网格表面
将mesh命令改为surf:
>>x= -7.5:0.5:7.5; y=x;
[X,Y]=meshgrid(x,y); R=sqrt(X.^2+Y.^2)+eps;
Z=sin(R)./R;
subplot(1,2,1); mesh(X,Y,Z);
subplot(1,2,2); surf(X,Y,Z); % 3维立体曲面图
其它
较有用的是给三维图形指定观察点的命令view(azi,ele),azi 是方位角, ele 是仰角.缺省时 azi=37.50,ele=300.
五) 程序设计 1)M文件及其调用
所谓M文件就是由MATLAB语言编写的可在MATLAB语言环境下运行程序源代码文件。这类文件的第一行必须是一特殊字符function开始,扩展名必须是.m 。
格式为:
function 因变量名=函数名(自变量名)
函数值的获得必须通过具体的运算实现,并赋给因变量.
M文件建立方法:
1. 在Matlab中,点:File->New->M-file 2. 在编辑窗口中输入程序内容
3. 点File->Save存盘, M文件名称必须与函数名一致,注意不要修改存盘的路径
例:定义函数 f(x1,x2)=100(x2-x12)2+(1-x1)2
function f=fun(x)
f=100*(x(2)-x(1)^2)^2+(1-x(1))^2
注:输出变量如果多于1个,则应该用方括号括起来;输入变量多于一个应该用逗号隔开。
function [mean,stdev]=stat(x)
[m,n]=size(x); % 取矩阵的行、列数
if m==1 % 判断是否是行向量,后面会说明if的用法
m=n; end
mean=sum(x)/m;
stdev=sqrt(sum(x.^2)/m-mean.^2); M文件的调用
定义好M文件后,我们就可以象调用Matlab自带的函数一样,直接使用函数fun.m,
例:计算 f(1,2), 只需在Matlab命令窗口键入命令:
x=[1 2]; y=fun(x) % 调用上面的M文件,此时x(1)=1,x(2)=2,最后的结果赋给y。
例:求数组的均值和方差
X=[2,4,-7,0,5,-1]; [xm,xd]=stat(x) %xm,xd分别对应上面定义的函数中
mean,stdev。
2) 程序设计语句 关系操作符 关系操作符 说明 < <= > >= = = ~= 逻辑运算符 逻辑操作符 & ︱ ~ 说明 与 或 非 小于 小于或等于 大于 大于或等于 等于 不等于 控制语句
(1) 循环语句 for循环:for v=s1:s2:s3 % s1:循环变量初值,s2:步长,s3:循环变量终值
执行语句 end
while循环:while 逻辑变量 % 执行循环的条件,逻辑变量为真时,循环继续
循环体语句 End
(2) 选择语句 形式一:
if 逻辑变量 %执行下面语句的条件 条件语句组 End
形式二:
if 逻辑变量
条件语句组1 %满足条件,执行语句组1 else
条件语句组2 %否则执行语句组2 End
形式三:
if逻辑变量1
条件语句组1 %当逻辑变量1为真,执行此语句组
elseif逻辑变量2 %否则判断逻辑变量2的真假,若真,执行条件语句组2
条件语句组2
„
elseif逻辑变量n
条件语句组n
else % 当所有的条件均不满足时,执行语句组n+1
条件语句组n+1
end
例 符号函数(fhfun.m)
1,x0sign0,x0
1,x0function f=fhfun(x) if x>0 f=1;
elseif x==0 f=0;
else
f=-1;
end
5、实验练习 编程求解下面各题
1、输入一个5×5对称阵a和5维向量x,求x'ax。
2、提取矩阵A=[1 2 3 4;4 5 3 6;6 7 8 9]的第六个元素a,删除A的最后一列生成新矩阵B,在B上提取新矩阵C=[2 3;5 3]。 3、用作图法求: (1):x28oglx
(2):4nisxx20 的近似解。
4、作曲面zx2y2的图形。
565、编写求阶乘的函数M文件,并用之计算c100。
26、a11,a22,ak2ak1ak2,求序列{an},直至an>1000时停止。
四、编写实验报告
按所拿到的实验报告纸,认真填写各项,并总结出心得体会。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- 91gzw.com 版权所有 湘ICP备2023023988号-2
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务