数据与函数的可视化
plot指令的基本调用方式
(1)plot(x)
x为向量时,以该元素的下标为横坐标、元素值为纵坐标绘出曲线。
x为实数二维数组时,则按列绘制每列元素值相对其下标的曲线,曲线数等于x数组的列数。
x为复数二维数组时,则按列分别以数组的实部和虚部位横、纵坐标绘制多条曲线。
(2)plot(x,y)
x、y为同维数组时,绘制以x、y元素为横纵坐标的曲线。
x为向量,y为二维数组、且其列数或行数等于x的元素数时,绘制多条不同颜色的曲线。
x为二维数组,y为向量时,情况与上相同,只是y仍为纵坐标。
(3)plot(x1,y1,x2,y2...)
绘制以x1为横坐标、y1位纵左边的曲线1,以x2位横坐标,y2位纵坐标的曲线2,等等。
其中x为横坐标,y为纵坐标,绘制y = f(x)函数曲线。
x = 0:pi/100:2*pi;
y = 2*exp(-0.5*x).*sin(2*pi*x);
plot(x,y)
多次叠绘、双纵坐标和多子图
多次调用plot命令在一幅图上绘制多条曲线,需要hold指令的配合
hold on 保持当前坐标轴和图形,并可以接受下一次绘制
hold off 取消当前坐标轴和图形保持,调用plot绘制完全新的图形,不保留以前的坐标格式、曲线
多子图
matlab允许在同一窗口布置几幅独立的子图,具体指令
subplot(m,n,k)
subplot(‘position’,【left,bottom,width,height】)
subplot(m,n,k)的含义,图形窗口包含(mxn)个子图,k为指定的当前子图的编号。
subplot(‘postion’, [left, bottom, width, height])用于手工指定子图位 置,指定位置的四元组采用归一化的标称单位,即认为整个图形窗 口绘图区域的高、宽的取值范围都是[0, 1],而左下角为(0,0)坐标。
绘制图形的辅助操作
曲线颜色控制符
数据点型控制符
曲线的线性控制符、颜色控制符、数据点形控制符可以组合使用。
t=(0:15)*2*pi/15;
y=sin(t);
subplot(3,2,1), plot(t, y); title('Lins style is default')
subplot(3,2,2), plot(t, y, 'o'); title('Lins style is o')
subplot(3,2,3), plot(t, y, 'k:'); title('Lins style is k:')
subplot(3,2,4), plot(t, y, 'k:*'); title('Lins style is k:*')
subplot(3,2,5), plot(t, y, 'm-d'); title('Lins style is m-d')
subplot(3,2,6), plot(t, y, 'r-p'); title('Lins style is r-p')
常用的坐标指令
刻度、分格线和坐标框
grid on 画出分格线
grid off 不画出分格线
box on 控制加边框线
box off 控制不加边框线
刻度设置:指令格式:set(gca, ‘xtick’, xs, ‘ytick’, ys)
图形标识
图形标识包括:图名(title)坐标轴名(xlabel、ylabel)图形文本注释(text)图例(legend)
简洁使用格式:title(s) xlabel(s) ylabel() legend(s) text(x,y,s)
字体样式设置:\fontname{arg} \arg \fontsize {arg} string
string为要输出的字符串,其前边均为属性控制
上下角标的控制
希腊字母与特殊字符
t=(0:100)/100*2*pi;
y=sin(t);
plot(t, y)
text(3*pi/4,sin(3*pi/4), '\fontsize{16}\leftarrowsin(t) = .707 ')
text(pi, sin(pi), '\fontsize{16}\leftarrowsin(t) = 0 ')
text(5*pi/4, sin(5*pi/4), '\fontsize{16}sin(t)
= -.707\rightarrow','HorizontalAlignment','right')
其中: ‘HorizontalAlignment’, ‘right’设置图形标识 为水平右对齐
特殊图形
直方图(柱形图)---累计式 ---分组式
水平直方图 ----累计实 ---分组式
饼图pie,饼图用来表示各元素占总和的百分数。该指令的第二输出变量是与第一变量通常的0-1变量,使对应饼块突出。
离散杆图stem
极坐标图polar
三维绘图的基本操作
三维绘图指令plot3,三维绘图指令中,plot3最易于理解,它的使用参数和plot十分相似
图像文件的读写与图像显示
imread指令 -----读取图像文件
imshow指令-----显示图像
imwrite指令------保存图像
matlab命令的执行方式
交互式命令执行方式:逐条输入、逐条执行、操作简单、直观、但是速度慢
M文件的程序执行方式:将命令编成程序储存在一个文件中,依次运行文件中的命令,可以重复进行。
用matlab编写的程序称为M文件,M文件根据调用方式不同分为两类
命令文件(script file)
函数文件(function file)
它们的扩展名都是.m
命令文件和函数文件的区别:
命令文件没有输入参数,也不返回输出参数,函数文件可以带输入参数,也可以返回输出参数。
命令文件对工作空间中的变量进行操作,文件中所有命令的执行结果也返回工作空间中;函数文件中定义的变量为局部变量,当函数文件执行完毕时,这些变量也被清楚。
命令文件可以直接运行;函数文件不能直接运行,要以函数调用的方式来调用它。
程序控制结构
任何复杂的程序都可以由这三种基本结构构成:顺序结构、选择结构、循环结构
顺序结构:指按照程序中的语句的排列顺序依次执行,直到最后一个语句
1.数据的输入,从键盘输入数据,可以使用input函数来进行
A = input (提示信息,选项)
2.数据的输出,命令窗口输出函数主要有disp函数,其调用格式为disp(输出项)
A = ‘hello tom’
disp(A)
3.程序的暂停
程序执行过程中暂停,可用pause函数,其调用格式为:pause(延迟描述)
选择结构:根据给定的条件成立或不成立,分别执行不同的语句
1.if语句
(1)单分支if格式
if fix(x) == x
disp(x);
end
(2)双分支格式
if 条件
语句组1
else
与剧组2
end
(3)多分支if语句
if 条件1
语句组1
elseif 条件2
语句组2
elseif 条件m
语句组m
else
语句组n
end
2.switch语句
switch 表达式
case 表达式1 语句组1
case 表达式2 语句组2 …
case 表达式m 语句组m
otherwise 语句组 n
end
3.try语句
try
语句组1
catch
语句组2
end
循环结构
1.for语句
for 循环变量 = 表达式1:表达式2:表达式3
循环体语句
end
2.while语句
while条件
循环体语句
end
3.break和continue语句
一般配合if使用 break 用来终止循环执行,continue用来跳过循环中的某些语句
函数文件
函数文件是另一种形式的M文件,每一个函数文件都定义一个函数
函数文件的基本结构
函数文件由function语句引导,其基本结构为:
function 输出形参表 = 函数名(输入形参表)
注释说明部分
函数体语句
注意:
1. 关于函数文件名
函数文件名通常由函数名再加上扩展名.m组成。 当函数文件名与函数名不同时,Matlab将忽略函数名而确认文件名 因此调用时使用函数文件名。
2. 关于注释说明部分 注释说明包括3部分:
① 紧随引导行之后以%开头的第一注释行。 这一行一般包括大写的函数文件名和函数功能简要描述,供lookfor 关键词查询和help在线帮助时使用。
② 第一注释行及之后连续的注释行。 通常包括函数输入/输出参数的含义及调用格式说明等信息,构成全 部在线帮助文本。
③ 与在线帮助文本相隔一空行的注释行。 包括函数文件编写和修改的信息,如作者和版本等。
3.关于return语句
如果函数文件中插入了return语句,则执行到该语句就结束函数的执行,流程转到调用该函数的位置。通常也不适用return语句。
function [s,p] = fcircle(r)
% FCIRCLE calculate the area and perimeter of a circle of radii r
% r 圆半径
% s 圆面积
% p 圆周长
s = pi*r*r;
p = 2*pi*r;
# 调用
[s,p] = fcircle(10)
函数的嵌套使用
function f = factor(n)
if n<=1
f = 1;
else
f = factor(n-1)*n; %递归调用求(n-1)!
end
函数参数的可调性
函数所传递参数数目的可调性,即参数的数量可以改变。
在调用函数时,Matlab用两个预定义变量nargin和nargout分别记录 调用该函数时的输入实参和输出实参的个数。
function fout = charray(a,b,c)
if nargin == 1
fout = a;end
if nargin == 2
fout = a+b;end
if nargin == 3
fout = (a*b*c)/2;
end
全局变量与局部变量
函数文件中的变量是局部变量
全局变量的作用域是整个matlab工作空间,所有函数都可以对它进行存取和修改
矩阵的分析与处理
常用的产生通用特殊矩阵的函数有
zeros:产生全0矩阵
ones:产生全1矩阵
eye:产生单位矩阵
rand:产生0~1之间均匀分布的随机矩阵
randn:产生均值为0,方差为1的标准正态分布随机矩阵
矩阵结构变换
1.对角阵和三角阵
只有对角线上有非零元素的矩阵称为对角矩阵,在研究矩阵时, 有时候需要将矩阵的对角线上的元素提取出来形成一个列向量,有 时也需要用一个向量构造一个对角阵。
(1)提取矩阵的对角线元素函数:diag
A = [1,2,3;4,5,6];
D = diag(A)
D =
1
5
另一种形式:diag(A,k)提取第k条对角线的元素
D1 = diag(A,1)
D =
2
6
(2)构造对角矩阵
如果V是一个m个元素的向量,diag(V)将产生一个m×m对角矩阵, 其主对角线元素即为向量V的元素。
diag([1,2,-1,4])
ans =
1 0 0 0
0 2 0 0
0 0 -1 0
0 0 0 4
例如: diag(1:3,-1)
ans =
0 0 0 0
1 0 0 0
0 2 0 0
0 0 3 0
矩阵求逆与线性方程组求解
对于一个方阵A,如果存在一个与其同阶的方阵B,使得: (I为单位矩阵) 则称B为A的逆矩阵,当然,A也是B的逆矩阵。求方阵A的逆矩阵可 调用函数inv(A)。
A = [1,-1,1;5,-4,3;2,1,1];
B = inv(A);
A*B
ans =
1.0000 0 0
-0.0000 1.0000 0
-0.0000 0 1.0000
将包含n个未知数,由n个方程构成的线性方程组表示为:
A = [1,2,3;1,4,9;1,8,27];
b = [5,-2,6]’;
x = inv(A)*b %x = A\b
x =
23.0000
-14.5000
3.6667
矩阵行列式值
把一个方程看做一个行列式,并按行列式的规则求值,称为行列式 的值。在Matlab中,使用函数det(A)得到。
A = rand(5)
A =
0.9501 0.7621 0.6154 0.4057 0.0579
0.2311 0.4565 0.7919 0.9355 0.3529
0.6068 0.0185 0.9218 0.9169 0.8132
0.4860 0.8214 0.7382 0.4103 0.0099
0.8913 0.4447 0.1763 0.8936 0.1389
B = det(A)
B =
-0.0071
多项式
多项式由一个行向量表示
该向量元素是该多项式的系数
且按照降幂次序排列
如:多项式x 4-12x3+25x+116由行向量: p=[1 -12 0 25 116]表示。
>>p=[1 -12 0 25 116]
p =
1 -12 0 25 116
>>r=roots(p)
r =
11.7473
2.7028
-1.2251 + 1.4672i
-1.2251 - 1.4672i
注意:matlab规定,多项式是行向量,根是列向量
已知多项式的根,求解多项式? 使用poly指令
>> pp=poly(r)
pp =
1.0000 -12.0000 -0.0000 25.0000
116.0000
多项式乘法(conv指令)
举例:多项式a(x)=x3+2x2+3x+4 和b(x)= x3+4x2+9x+16的乘积。
>> a=[1 2 3 4] ; b=[1 4 9 16];
>> c=conv(a, b)
c =
1 6 20 50 75 84 64
多项式除法(deconv)
c(x)=x6+6x5+20x4+50x3+75x2+84x+64 除以b(x)= x3+4x2+9x+16
>> c=[1 6 20 50 75 84 64];
>> b=[1 4 9 16];
>> [q , r]=deconv(c , b)
q =
1 2 3 4
r =
0 0 0 0 0 0 0
多项式的导数
举例:求b(x)= x3+4x2+9x+16的导数。
>> b=[1 4 9 16];
>> d=polyder(b)
d =
3 8 9
结果为: 3x2+8x+9
函数的数值导数