一、MATLAB简介
- MATLAB(Matrix Laboratory, 即矩阵实验室)是MathWork公司推出的一套高效率的数值计算和可视化软件.
- MATLAB是当今科学界最具影响力、也是最具活力的软件, 它起源于矩阵运算, 并已经发展成一种高度集成的计算机语言.
- 它提供了强大的科学运算、灵活的程序设计流程、高质量的图形可视化与界面设计、便捷的与其他程序和语言接口的功能.
A. MATLAB发展简史
1、 MATLAB的开发单位:
美国Mathworks公司,Cleve Moler博士
2、几个不同的发展时期
- 70年代末,Cleve Moler为讲授矩阵理论和数据分析编写了Linpack与Eispack软件包。
- 1984年,成立公司Mathworks,推出第二代MATLAB。内核用C编写。
- 1990年,推出系统仿真工具Simulink。
- 1993年,Matlab 4.0——Windows版。
- 1994年,Matlab 4.2——开始广受重视和应用。
- 1999年,Matlab 5.3——32位运算。
- 2000年11月,Matlab 6.0。
- 2001年5月,Matlab 6.1。
- 2002年8月,matlab 6.5—— 加入JIT加速器。
B. MATLAB的特点
- 一个变量可以直接当作一个矩阵。
- 一个元素可以直接当作一个复数。
- 用解释方式对程序加以执行。
- 数据可以通过MATLAB绘图功能实现可视化,最复杂的可视效果可以是三维坐标中的立体曲面图。
- 不仅能进行数值运算,还能进行符号运算及系统仿真。
- 有多达30多个工具箱。
- 与其他语言程序或应用程序有方便的接口。例如:C、Fortran、Word等。
- 大量繁杂的数学运算和分析可调用MATLAB的函数直接求解。
- “教育部全国计算机专业课程指导委员会”已将MATLAB作为推荐课程。
- MATLAB建立在C/C++语言基础之上, 抽象程度更高, 也更加接近人类的自然语言, 因而在编写程序时可以更多关注问题的整体处理上, 而不是数据的细节处理.
- MATLAB内置了大量的函数, 用户可以直接使用而不需要再自己编写. 由于MATLAB设计的开放性, 许多领域的专家都为MATLAB编写了各种程序工具箱. 这些工具箱提供了用户在特别应用领域所需的许多函数, 这使得用户不必花大量的时间编写程序就可以直接调用这些函数, 达到事半功倍的效果.
- MATLAB使用非常简洁的语句来表达丰富的含义, 简单易懂, 与C/C++等高级程序设计语言相比代码量少很多, 因而编程速度快, 非常适合做数学运算.
二、 MATLAB基本语法
- MATLAB的基本运算对象是数组(矩阵), 即使是1个数也当作一个1×1的矩阵来看待;
- MATLAB语法与其它高级程序设计语言相似, 符合一般的书写习惯;
- MATLAB语句可以以分号来结束, 也可以不用. 若以分号结束,则在命令窗口中不显示计算结果, 否则显示结果;
- 变量无需预先定义, 可在需要时直接使用;
- MATLAB的代码区分大小写;
- 以%作为注释界定符.
1、数组的定义
a=5 %或 a=[5] A=[2 0 4 1] B=[4 1 6; 5 9 4; 3 1 2] %这是个3*3矩阵
规则1:
以方括号为界定符, 元素之间用空格或逗号分隔, 两行之间用分号分隔; 各行元素个数必须相同;
A=1:10 B=1:3:10 C=10:-1:1 X=linspace(-pi,pi,50) 对应的: A=[1 2 3 4 5 6 7 8 9 10] B=[1 4 7 10] C=[10 9 8 7 6 5 4 3 2 1] X=[-3.1416 -3.0134 -2.8851 ... 2.8851 3.0134 3.1416]
规则2:
- 产生等差数列使用a:s:b, 从a开始, 步长为s, 最后一个数不超过b;
- linspace(a,b,n)产生n个数, 将区间[a,b]分成n-1等份.
A=zeros(3,3) %全零 B=ones(3,3) %全一 C=eye(3,3) %单位矩阵
规则3:
特殊矩阵由相应的命令生成, 行数和列数在参数中指定.
A=rand(3,3) %0~1均匀分布随机数矩阵 B=1+9*rand(3,3) %1~10均匀分布随机数矩阵 C=randn(3,3) %标准正态分布随机数矩阵
规则4:
- a~b均匀分布随机数矩阵使用a+(b-a)*rand(m,n);
- a为期望b为方差的正态分布随机数矩阵使用a+b*randn(m,n).
2、数组元素的存取操作
A(1) %这个是取向量中的第一个元素
B(1,2) %第一行第二列元素
B(1,:) %这是第一行所有矩阵
B(:,1)
B(2:3,1:2)
规则:
- 取向量的元素使用A(n);
- 取矩阵的元素使用A(m,n);
- 取子矩阵使用A(m1:m2,n1:n2);
- 表示“所有” 使用“:”
- 使用size(A)来获取 数组 A的行数和列数
>> A=[1 3 5 7 9] A = 1 3 5 7 9 >> A(2) ans = 3 >> A(6)=11 A = 1 3 5 7 9 11 >> A(1:end) ans = 1 3 5 7 9 11 >> A(end:-1:1) ans = 11 9 7 5 3 1 >> length(A) ans = 6
>> A=eye(3,3) A = 1 0 0 0 1 0 0 0 1 >> A(1,2)=2 A = 1 2 0 0 1 0 0 0 1 >> A(2,:)=[1 2 3] A = 1 2 0 1 2 3 0 0 1 >> A(:,3)=A(:,2) A = 1 2 2 1 2 2 0 0 0 >> size(A) ans = 3 3
3、算术运算
A+B A-B %矩阵运算,如果参与运算的变量中有一个是标量, 则MATLAB将标量扩展成维数相同的矩阵, 与另一矩阵做运算 A*B A/B A\B A^2 %数组运算 A.*B %A与B元素对应相乘 A./B %A与B元素对应相除 A.^2 %A的元素和平方
4 、数组变形
1.C=[A B]
2.C=[A;B]
4.C=A’
4.C=repmat(A,m,n)
5.C=A(:) %将A的所有元素排成一列
6.A(1,:)=[] %删除A的第1行
>> A=eye(2,2) %产生2阶单位矩阵 A = 1 0 0 1 >> B=rand(2,2) %产生2阶随机数矩阵 B = 0.9649 0.9706 0.1576 0.9572 >> C=[A B] %矩阵横向合并 C = 1.0000 0 0.9649 0.9706 0 1.0000 0.1576 0.9572 >> C=[A;B] %矩阵纵向合并 C = 1.0000 0 0 1.0000 0.9649 0.9706 0.1576 0.9572 >> C=A’ %矩阵转置 C = 1 0 0 1 >> C=repmat(A,1,2) %矩阵重复 C = 1 0 1 0 0 1 0 1 >> C=A(:) %排成一列 C = 1 0 0 1 >> A(1,:)=[] %删除一行 A = 0 1
5、举例
解线性方程组
6x1+3x2+4x3=3
-2 x1+5 x2+7 x3=-4
8 x1-4 x2-3 x3=-7
A = [6 3 4; -2 5 7; 8 -4 -3] B = [3;-4; -7] X = A\B X = A^(-1)*B X = inv(A)*B X = linsolve(A,B) 得到: X = 0.6000 7.0000 -5.4000
6、常用函数
分类 |
函数名 |
意义 |
基本数学函数 |
abs(x) |
实数的绝对值或复数的模 |
sqrt(x) |
开平方 |
|
real(z) |
复数z的实部 |
|
imag(z) |
复数z的虚部 |
|
round(x) |
取整,四舍五入 |
|
fix(x) |
取整,无论正负,舍去小数至最近整数 |
|
floor(x) |
取整,舍去正小数至最近整数 |
|
ceil(x) |
取整,加入正小数至最近整数 |
|
exp(x) |
自然指数 |
|
pow2(x) |
2的指数 |
分类 |
函数名 |
意义 |
基本数学函数 |
rem(x,y) |
求x除以y的馀数 |
gcd(x,y) |
整数x和y的最大公因数 |
|
lcm(x,y) |
整数x和y的最小公倍数 |
|
log(x) |
以e为底的对数,即自然对数或 |
|
log2(x) |
以2为底的对数 |
|
log10(x) |
以10为底的对数 |
|
sign(x) |
符号函数. 当x<0时, sign(x)=-1; 当x=0时, sign(x)=0; 当x>0时, sign(x)=1. |
|
分类 |
函数名 |
意义 |
三角函数 |
sin(x) |
正弦函数 |
cos(x) |
余弦函数 |
|
tan(x) |
正切函数 |
|
asin(x) |
反正弦函数 |
|
acos(x) |
反余弦函数 |
|
atan(x) |
反正切函数 |
|
sinh(x) |
双曲正弦函数 |
|
cosh(x) |
双曲余弦函数 |
|
tanh(x) |
双曲正切函数 |
|
asinh(x) |
反双曲正弦函数 |
|
acosh(x) |
反双曲余弦函数 |
|
atanh(x) |
反双曲正切函数 |
分类 |
函数名 |
意义 |
杂项 |
min(x) |
向量x的元素的最小值 |
max(x) |
向量x的元素的最大值 |
|
mean(x) |
向量x的元素的平均值 |
|
diff(x) |
向量x的相邻元素的差 |
|
length(x) |
向量x的元素个数 |
|
size(x) |
数组元素个数 |
|
sort(x) |
对向量x的元素进行排序 |
|
norm(x) |
向量x的欧氏长度 |
|
sum(x) |
向量x的元素总和 |
|
prod(x) |
向量x的元素总乘积 |
|
cumsum(x) |
向量x的累计元素总和 |
分类 |
函数名 |
意义 |
矩阵计算 |
det(A) |
矩阵行列式 |
rank(A) |
矩阵的秩 |
|
inv(A) |
矩阵的逆 |
|
norm(A) |
矩阵范数 |
|
trace(A) |
矩阵的迹 |
|
eig(A) |
矩阵特征值和特征向量 |
|
rref(A) |
化为行阶梯形 |
|
cond(A) |
矩阵条件数 |
|
lu(A) |
LU分解 |
|
chol(A) |
Cholesky分解 |
|