第一讲:安装MATLAB
(没有打广告,也可以搜索软件安装管家),如果大学有钱(比如我们学校花了50多万)可以安装正版。
第二讲:符号计算
首先将一下help
的用法:如果你不知道help的用法,可以在MATLAB命令行窗口中输入help help
来查看help的用法,学会之后可以利用help来学习其他的函数用法。
ps:(.*表示矩阵之间的值一一对应相乘。)
一、字符串
1.字符串用单引号‘’或者双引号“”来表示。
2.字符串函数
length()
:查看字符串长度。
class()
:查看字符串类型。
这两个尤为常用。
double()
:用来查看字符串的ASCII码储存内容。
char()
:用来将ASCII码转换成字符串形式。
ischar()
:用来判断某一个变量是否为字符串,如果返回值是1,则表示为字符串。
strcmp(x,y)
:比较字符串x和y的内容是否相同,返回值若为1则相同,为0则不相同。
findstr(x,x1)
:寻找在某个长字符串x中的子字符串x1,返回其起始位置。
deblank(x)
:删除字符串尾部的空格。
3.使用一个变量来储存多个字符串。
(1)多个字符串组成一个新的行向量
将多个字符串变量用“,”连接。
(2)使用二维字符数组
每个字符串放在一行构成二维字符数组。
(3)使用str2mat、strvcat和char函数构成字符串矩阵
总是按最长的设置,不足的末尾用空格补齐。
例如:str6=str2mat(str1,str2,str3)
str1='Hello';
str2='I liek "MATLAB"';
str3=[str1,'!',str2]
str2mat:
4.执行字符串
使用eval命令直接执行字符串。
5.显示字符串
直接使用disp命令显示字符串。
二、符号表达式的建立
(一)定义符号常量
符号常量是不含变量的符号表达式,用sym命令来创建符号常量。
格式:sym('常量')
(二)定义不好变量和符号表达式
参与符号运算的对象可以是符号变量、符号表达式和符号矩阵。符号变量要先定义后饮用。可以用sym函数、syms函数将运算量定义为符号型数据。引用符号运算函数式,用户可以指定函数执行过程中的变量参数;若用户没有指定变量参数,则使用findsym函数默认的变量作为函数的变量参量。
1.sym函数
格式
sym('变量','参数')%把变量定义为符号对象
说明:参数用来设置限定符号变量的数学特性,可以选择为positive(正实)、real(实)和unreal(非实)符号变量。如果不限定则参数可省略。
eg:作符号计算:
注:a,b,x,y均为符号运算量。在符号运算前,应先将a,b,x,y定义为符号运算量。
2.syms函数
syms函数功能与sym函数功能类似。都是声明变量,不同之处是syms一次可以声明许多变量。具体语法格式为:
syms x y z
C可以声明后使用。
三、符号表达式的代数运算
1.基本运算符
运算符 + - * \ / ^
分别实现符号矩阵的加、减、乘、左除、右除、求幂运算。
运算符 .* ./ .\ .^
分别实现符号数组的乘、除、求幂,即数组间元素与元素的运算。
运算符' .'
分别实现符号矩阵的共轭转置、非共轭转置。
2.关系运算符
在符号对象(即sym定义的符号)的比较中,只有==和~=,即相等和不等的比较,无大于、小于大于等于等的概念。
3.函数运算
1)三角函数和双曲函数
三角反函数除了atan2函数仅能用于数值计算外,其余函数在符号运算中与数值计算的使用方法相同。
2)指数和对数函数
指数函数sqrt、exp、expm
的使用方法与数值计算的完全相同;对数函数在函数计算中只有自然对数log(表示ln),而没有数值计算中的log2和log10。
3)复数函数
复数的共轭conj
、求实部real
、求虚部imag
和求模abs函数与数值计算中的使用方法相同。但注意在函数计算中,MATLAB没有提供就求相角的命令。
4)矩阵代数命令
MATLAB提供的常用矩阵代数命令有diag,triu,tril,inv,det,rank,poly,expm,eig
等,他们的用法几乎与数值运算中的情况完全相同。
zeros:
产生全0矩阵(零矩阵)。
ones:
产生全1矩阵(幺矩阵)。
eye:
产生单位矩阵。
rand:
产生0~1间均匀分布的随机矩阵。
randn:
产生均值为0,方差为1的标准正态分布随机矩阵。
diag(A,k):
提取矩阵A的第k条对角线元素。
diag([...]):
产生一个n*n的对角矩阵。
inv(A):
求A的逆矩阵。
det(A):
求A的行列式。
ploy(A):
求A的特征多项式。
2.任意精度的控制。
格式:digits(n)
%设置默认的精度。
n为所期望的有效数字。
格式:S=vpa(s,n)
%将s表示为n位有效位的数的符号对象。
说明:s可以是数值对象或者符号对象,但计算结果一定是符号对象,但参数n省略时,则以给定的digits指定精度。
四、符号表达式的四则运算。
1)factor(S)
:%对S分解因式,S是符号表达式或符号矩阵;
2)expand(S)
:%对S进行展开,S是符号表达式或符号矩阵;
3)collect(S)
:%对S合并同类项,S是符号表达式或符号矩阵;
4)collect(S,v)
:%对S按变量v合并同类项,S是符号表达式或符号矩阵。
5)[N,D]=numden(f)
:N 为通分后的分子,D 为通分后的分母。
表达式化简
1)simplify(S):应用函数规则对S进行化简;
2)simple(S):尝试多种不同的方法进行化简,以寻求S的最简形式,并显示化简过程。
(多次使用simple化简,可以使式子化简到最简形式。)
第三讲 符号运算与微积分
一、符号对象和符号表达式
在进行符号运算时,必须先定义基本的符号对象,可以是符号常量、符号变量、符号表达式等。符号对象是一种数据结构。
1.查找符号变量
findsym(s,n)
按字母顺序列出符号表达式 s 中的n个符号变量,若没有指定n,则查找所有。(常量 pi, i, j 不作为符号变量)。
2.符号表达式的替换
subs(f,x,a)
用 a 替换字符函数 f 中的字符变量 x
eg:f(x)=sin|x|,求fx的右极限。
二、极限问题
1.单变量函数的极限
limit(f,x,a)
limit函数的另一种功能是求单边极限,其调用格式为:
limit(f,x,a,‘right’)
或 limit(f,x,a,'left')
2.多变量函数的极限
L=limit(limit(f,x,x0),y,y0)
或L= limit(limit(f,y,y0),x,x0)
。
第三讲
三、不定积分
int(f,x)
int函数求函数f对变量x的不定积分。
eg:求不定积分
四、定积分
int(f,x,a,b)
int函数求函数f对变量x的定分,a,b积分区间。
五、导数
1.MATLAB中的一元函数求导: diff(f,x,n)
diff函数求函数f对变量x的n阶导数。
pretty(x)使x以美观的方式显现出来。
2.MATLAB中的二元函数求导:
diff(diff(f,x,m),y,n)
diff(diff(f,y,n),y,m)
六、泰勒级数的展开
k为需要展开的项数,默认为6。
七、符号求解器
solve
s=solve(f,v)
:求方程关于指定自变量的解;
s=solve(f)
:求方程关于默认自变量的解。
eg:解方程:x^3-3*x=-1
solve 也可以用来解方程组
solve( f1 , f2 , ... , fN , v1 , v2 , ... , vN)
第五讲、求解微分方程及绘图
一、求解微分方程
求解微分方程的命令为
dsolve(‘eqn1’, ‘eqn2’, ..., ‘x’)
其中“eqni”表示第 i 个方程,“x”表示微分方程(组)中的自变量,默认时自变量为 t。
微分方程的记述规定:当y是应变量时,用Dny
表示y的n阶导数。
求通解:
求特解:
求解微分方程组
二、MATLAB作图
1.曲线图
二维画图命令为:
plot(x,y,s)
s取值:省略则默认实线黑色
PLOT(X,Y1,S1,X,Y2,S2,……,X,Yn,Sn)可以将多条线作在一张图上。
eg:在[0,2*pi]用红线画sin(x),用绿线画cos(x)。
2.符号函数(显函数,隐函数和参数方程)
(1)ezplot('f(x)',[a,b])
表示在a<x<b绘制显函数f(x)的函数图。
ezplot('f(x,y)',[xmin,xmax,ymin,ymax])
表示在区间xmin<x<xmax和ymin<y<ymax绘制隐函数f(x,y)=0的函数图。
ezplot('x(t)','y(t)',[tmin,tmax])
表示在区间tmin<t<tmax绘制参数方程x=x(t),y=y(t)的函数图。
eg1:在[0,pi]上画y=cos(x)的图形。
eg2:在[0,2pi]上画x=cos3t,y=sin3t星形图。
eg3:在[-2,0.5],[0,2]上画隐函数ex+sin(xy)=0的图。
(2)fplot
fplot('fun',lims)
表示绘制字符串指定的函数在lims=[xmin,xmax]的图形。
eg:在[-1,2]上画y=ex+cos(3x2)的图形。
3.对数坐标图
loglog(Y)
表示 x、y坐标都是对数坐标系
semilogx(Y)
表示 x坐标轴是对数坐标系
semilogy(…)
表示y坐标轴是对数坐标系
plotyy
有两个y坐标轴,一个在左边,一个在右边
eg:用方形标记创建一个简单的loglog。
4.空间曲线
(1)一条曲线plot3(x,y,z,s)
eg:在区间[0,10pi]画出参数曲线x=sin(t),y=cos(t),z=t。
(2)多条曲线
其中x,y,z都是m*n矩阵,其对应的每一列表示一条曲线。
eg:画多条曲线观察函数Z=(X+Y).^2。
这里meshgrid(x,y)的作用是产生一个以向量x为行、向量y为列的矩阵。
第七讲 MATLAB绘图及修饰
一、曲线图
1.s的标准设定值如下:
字符 | 线型 |
---|---|
y | 黄色 |
m | 粉红 |
c | 亮蓝 |
r | 大红 |
g | 绿色 |
b | 蓝色 |
w | 白色 |
k | 黑色 |
. | 点线 |
o | 圈线 |
× | ×线 |
+ | +字线 |
- | 实线 |
* | 星形线 |
: | 虚线 |
-.(–) | 点划线 |
v | 下三角 |
^ | 上三角 |
< | 左三角 |
> | 右三角 |
square | 正方形 |
diamond | 菱形 |
pentagram | 五角星 |
hexagram | 六角星 |
2.单窗口多曲线分图绘图
subplot(m,n,p)
将一个图分割为m*n块,在第p块上绘图。
subplot(‘position’,[left bottem width height])
3.多窗口绘图
figure(n)创建窗口序号,n为窗口序号。
4.图形加注功能
title
—— 给图形加标题
xlable
—— 给x轴加标注
ylable
—— 给y轴加标注
text
—— 在图形指定位置加标注
gtext
—— 将标注加到图形任意位置
grid on(off)
—— 打开、关闭坐标网格线
legend
—— 添加图例
axis
—— 控制坐标轴的刻度
例5:在(0,10)同一张图中绘制正弦和余弦函数。
t=0:0.1:10
y1=sin(t);y2=cos(t);plot(t,y1,'r',t,y2,'b--');
x=[1.7*pi;1.6*pi];
y=[-0.3;0.8];
s=['sin(t)';'cos(t)'];
text(x,y,s);
title('正弦和余弦曲线');
legend('正弦','余弦')
xlabel('时间t'),ylabel('正弦、余弦')
grid
axis square
5.axis的用法还有。
axis([xmin xmax ymin ymax]) —— 用行向量中给出的值设定坐标轴的最大和最小值。
如axis ([-2 2 0 5])
axis(equal) —— 将两坐标轴设为相等
axis on(off) —— 显示和关闭坐标轴的标记、标志
axis auto —— 将坐标轴设置返回自动缺省值
二、基本二维绘图函数
1.fill功能:绘制二维多边形,并填充颜色。
x=[1 2 3 4 5];y=[4 1 5 1 4];
fill(x,y,'r')
2.特殊二维函数绘图
bar
–––– 绘制直方图
polar
–––– 绘制极坐标图
hist
–––– 绘制统计直方图
stairs
–––– 绘制阶梯图
stem
–––– 绘制火柴杆图
rose
–––– 绘制统计扇形图
comet
–––– 绘制彗星曲线
errorbar
–––– 绘制误差棒图
compass
–––– 复数向量图(罗盘图)
feather
–––– 复数向量投影图(羽毛图)
quiver
–––– 向量场图
area
–––– 区域图
pie
–––– 饼图
convhull
–––– 凸壳图
scatter
–––– 离散点图
eg:在[0,2pi]绘制y=sin(x)阶梯曲线
在[0,2pi]绘制极坐标y=cos(x)图
第九讲 符号变换和符号卷积
Fourier变换及其反变换
Fw=fourier(ft,t,w) 求“时域”函数ft的Fourier变换
ft=ifourier(Fw,w,t) 求“频域”函数Fw的Fourier反变换
Laplace变换及其反变换
Fs=laplace(ft,t,s) 求“时域”函数ft的Laplace变换
ft=ilaplace(Fs,s,t) 求“频域”函数Fs的Laplace反变换
Z变换及其反变换
FZ=ztrans(ft,n,z) 求“时域”序列ft的Z变换
fn=itrans(FZ,z,n) 求“频域”序列FZ的Z反变换
符号卷积
利用拉氏变换求取。
第十一讲 数组
1.数组的创建
利用冒号生成等差数组, 格式 Start_val:Step: Stop_val
Start_val表示等差数组的第一个元素
Step表示步长,步长为正代表递增,步长为负,代表递减, 默认为1
Stop_val表示等差数组的最后一个元素
linspace函数 :
linspace(Start_val, Stop_val, N), 默认N= 100
等比数组的创建
logspace函数 :
logspace(Start_val, Stop_val, N), 默认N= 50
产生10Start_val到10Stop_val包含N个元素的等比数组
2.访问数组
除了下标可以访问数组中的元素外,也可以使用冒号寻址。
A(a1:b1,a2:b2)
此形式,表示的是截取矩阵A的a1行到a2行,a2-b2列的矩阵元素。
A(:,3)
表示选取数组的第三列。
A(3,:)
表示选取数组第3列。
数组的查找函数是find,它能够查找数组中的非零数组元素,并返回其数组索引值。
find函数在MATLAB中的使用语法形式:
(1)a=find(A)返回数组A中非零元素的单下标索引。注意单下标索引是按列计数
(2) [a,b]=find(A)返回数组A中非零元素的双下标索引放方式。
3.数组的排序
sort 函数的调用格式有:
B = sort(A)
B = sort(A,dim)
B = sort(…,mode)
[B,IX] = sort(…)
其中的 B 为保存结果的数组;A 为待排序的数组,当 A 为多维数组时,用 dim 指定需要排序的维数(默认为1);mode 为排序的方式,可以取值“ascend”和“descend”,分别表示升序和降序,默认为升序;IX 用于存储排序后的下标数组。
4.数组的运算
(1)数值运算
数组的数值运算
• 数组的加减法 + -
• 数组的乘除法 .* ./
• 数组的乘方 .^
(2)关系运算
关系运算包含6种:小于(<)、大于(>)、等于(==)、小于等于(<=)、大于等于(>=)和不等于(~=)。MATLAB 比较两个元素大小时,如果表达式为真,则返回结果1,否则返回0。
通过关系运算符实现数组的关系运算。返回结果为一个数组,结果数组的元素为0或者1,由相互比较的两个数组的相应元素的比较结果决定。
两个数组进行关系运算,需要维数相等
数组和单个数值也可以进行关系运算
(3)逻辑运算
数组逻辑运算也和前面讲过的一样符主要包括“与”(&)、“或”( | )和“非”( ~ )。
通过逻辑运算符实现数组的逻辑运算。返回结果为一个数组,结果数组的元素为0或者1。
两个数组进行逻辑运算,需要维数相等
数组和单个数值也可以进行逻辑运算
5.扩展数组
(1)下标索引扩展数组
(2)cat系列函数
cat系列函数包括:cat,horzcat和vertcat。不管哪个连接函数,都必须保证被操作的数组可以被连接,即在某一个方向上尺寸一致。
cat(dim,A,B)
:dim=1行连接,dim=2列连接
最终形成6行3列的矩阵。
horzcat函数(列连接)
语法:Z=horzcat(A,B,C…)
vertcat函数(行连接)
语法:Z=vertcat(A,B,C…)
6.数组元素的删除
删除数组元素,可以通过将该位置的数组元素赋值为空方括号( [] ) 即可,一般配合冒号使用,将数组中的某些行、列元素删除。
7.多维数组的创建
MATLAB无法像一位数组和二维数组一样直接创建,需要借助一些函数方式来创建。
利用数组函数生成多维数组
利用直接索引方式生成数组
通过 cat 函数创建多维数组
A=cat(3, M, N)
8.其他常用的数组函数
numel(A)
:获取数组A的元素总个数
reshape(A,m,n)
:把数组A变成m行n列的数组,m*n必需等于numel(A)。
[m,n]=size(A)
:返回数组各维的大小。
m=length(A)
:如A为一维数组,返回数组的长度;如A为二维数组,返回数组列方向的长度
flipud(A)、fliplr(A)
:实现数组A的上下翻转、和左右翻转。
9.特殊矩阵
(1)魔方矩阵magic(n)
魔方矩阵有一个有趣的性质,其每行、每列及两条对角线上的元素和都相等。
(2)希尔伯特矩阵
范得蒙(Vandermonde)矩阵最后一列全为1,倒数第二列为一个指定的向量,其他各列是其后列与倒数第二列的点乘积。可以用一个指定向量生成一个范得蒙矩阵。在MATLAB中,函数vander(V)
生成以向量V为基础向量的范得蒙矩阵。例如,A=vander([1;2;3;5])即可得到上述范得蒙矩阵。
(3)希尔伯特矩阵
生成希尔伯特矩阵的函数是hilb(n)
。
使用一般方法求逆会因为原始数据的微小扰动而产生不可靠的计算结果。MATLAB中,有一个专门求希尔伯特矩阵的逆的函数invhilb(n)
,其功能是求n阶的希尔伯特矩阵的逆矩阵。
(4)帕斯卡矩阵
我们知道,二次项(x+y)n展开后的系数随n的增大组成一个三角形表,称为杨辉三角形。由杨辉三角形表组成的矩阵称为帕斯卡(Pascal)矩阵。函数pascal(n)
生成一个n阶帕斯卡矩阵。
(5)伴随矩阵
MATLAB生成伴随矩阵的函数是compan(p)
,其中p是一个多项式的系数向量,高次幂系数排在前,低次幂排在后。例如,为了求多项式的x3-7x+6的伴随矩阵,可使用命令:
第十三讲
一、数值极值点
1.一元函数的极小值点
fminbnd()
求单变量函数在定点区域的最小值
x = fminbnd(fun,x1,x2)
x = fminbnd(fun,x1,x2,options)
[x,fval] = fminbnd(...)
[x,fval,exitflag] = fminbnd(...)
[x,fval,exitflag,output] = fminbnd(...)
2.多元函数的极小值点
求多元极小值点主要有两种方法:单纯行下山法(Downhill simplex methods)和拟牛顿法(qussi-Newton methods)
x=fminsearch(fun,x0)单纯行下山法求多元函数极值点的指令的最简格式
[x,fval,exitflag,output]=fminsearch(fun,x0,options ,p1,p2)单纯行下山法求多元函数极值点的指令的最完整格式格式
x=fminunc(fun,x0)拟牛顿法求多元函数极值点的指令的最简格式
[x,fval,exitflag,output]=fminunc(fun,x0,options ,p1,p2)拟牛顿法求多元函数极值点的指令的最完整格式格式
二、函数的微积分
1.函数积分
单重积分
trapz
梯形法数值积分
quad
辛普森数值积分
quadl
科茨数值积分
2.多重积分
dblquad(fun,xmin,xmax,ymin,ymax)
二重积分
triplequad(fun,xmin,xmax,ymin,ymax,zmin,zmax)
三重积分
第十四讲 数值计算
1.求数值微分
diff(x,n)
计算向量或矩阵x的n阶微分或差分
[FX,FY] = gradient(F)
返回F的数值梯度
[FX,FY] = gradient(F,h)
用h作为各个方向的间断点,求F的数值梯度
2.函数中的常微分方程
木学到精髓。
3.常微分方程边界问题
4.多项式及其操作
poly2sym(p)
:由多项式向量列出多项式方程。
c=poly(r)
:由根求多项式。
roots(c)
:由多项式的系数向量求根。
polyder(h)
:由多项式的系数向量求出多项式导数。
polyval(p,s)
:由多项式系数向量求出多项式在s的值。
5.多项式的拟合
polyfit(x,y):用二乘法对已知数据进行x、y拟合,以求得n阶多项式系数向量。
eg:求五阶多项式对0到pi/2上的正弦函数进行最小拟合。
6.函数插值
(1)函数插值
yi = interp1(x,y,xi,‘method’)
用选择的方法进行插值
linear
:线性插值。MATLAB默认方法,将差指点附近的两个数值点用直线连接,然后在直线上取对应点
nearest
:最近点插值。根据已知的插值点与已知数据点的远近程度进行插值。插值点优先选择较近的点进行插值
cubic
:3次多项式插值。根据已知数据求出一个3次多项式,然后根据多项式进行插值
spline
:3次样条插值。在每个子区间构造一个3次多项式,使其插值函数除满足插值条件外,还要求在各个节点处具有光滑条件
(2)二维插值
第十七讲 作非线性最小二乘拟合
1.MATLAB提供了求非线性最小二乘拟合的函数:lsqcurvefit
.这个命令都要先建立M文件fun.m,在其中定义函数f(x)。
已知数据点:x(x1,x2,…,xn),
y(y1,y2,…,yn)。
lsqcurvefit用以求含参量x(向量)的向量值函数。使得
最小。
第十八讲 条件语句和循环语句
一、条件语句
if 逻辑式
程序语句
end
if 逻辑式
程序语句1
else
程序语句2
end
if 条件1
程序语句1
elseif 条件2
程序语句2
......
elseif 条件n
程序语句n
else
程序语句
end
二、switch语句
switch 表达式
case 表达式1
语句组1
case 表达式2
语句组2
……
case 表达式m
语句组m
otherwise
语句组n
end
三、try语句
try
语句组1
catch
语句组2
end
try语句先试探性执行语句组1,如果语句组1在执行过程中出现错误,则将错误纤细赋给保留的lasterr变量,并转去执行语句组2.
四、for语句
for 循环变量=矩阵表达式
循环体语句
end
五、while语句
while 逻辑表达式
循环体语句
end
六、break语句和continue语句
break语句用于终止循环,执行下一语句。
continue语句用于跳过该次循环,继续下一次循环。
第十九讲 图像文件的读写和图像显示
imread():读取图像文件
imshow():显示图像
imwrite():保存图像
第二十讲 M文件的分类
M文件根据调用方式的不同分为两类:命令文件和函数文件,他们的扩展名都是.m。
函数文件要求函数名和文件名名字相同。