Matlab数值计算
1. Matlab常用函数补充
其他
...
表示一行未结束,换行。
数据结构
-
cell
创建元胞,访问元胞用{ }
。 -
struct
创建结构体,它是有名字的元胞。
矩阵
-
A(end)
可以访问数组最后的一个元素。 -
rand
,randn
,randi
产生的随机数分别为均匀随机分布、正态随机分布、均匀随机分布整数。 -
diag
对角矩阵,blkdiag
对角块矩阵。 -
sqrtm
矩阵的主平方根。 -
hilb
希尔伯特矩阵。 -
hadamard
阿达马(Hadamard)矩阵。 -
wilkinson
威尔金森(Wilkinson)矩阵。 -
gallery
可用于生成多种特殊的矩阵。
字符串
findstr
,strrep
分别为字符串种查找字串、替换字串。
2维绘图
-
fplot
画图时自动确定采样频率。 -
y=@(t) sin(x.^3)
定义了一个匿名函数。 -
xlim
,ylim
限制了坐标轴的显示范围,常用于看图像的局部。
3维绘图
-
meshgrid
生成一个2维的完全点集。 -
surfl
,contour
,contourf
分别表示曲面、三维等高线、2维填充等高线。
2. 线性方程组和特征系统
线性方程组$Ax=b$
-
可用
x = A\b
求解,相当于x=b/A
或者x=inv(A)*b
。\
或/
运算符会根据矩阵的特征采用不同的算法,可以求欠定、正定、超定等等各种方程。 -
利用
inv(A) = adj(A) / |A|
来求逆的效率很低,尽量少用。 -
b=0
则为 齐次 方程组。 -
|A| = 0
表示矩阵A
是 奇异 的,他的逆矩阵不存在,此时方程组无解或者有无穷多解。 -
rank(A)
表示矩阵A
的 秩,它代表了矩阵中线性无关的行(或列)的个数,同时也是 约化阶梯矩阵rref(A)
非零行的个数。 -
当
size(A) = [m,n]
,rank(A) = min(m,n)
表示A
满秩,也就是方程有唯一解。 -
超定:方程个数大于未知数个数。
-
病态方程组 是指
A
中元素微小的变化都会导致解的巨大变化,在近似解时会很大的影响精度。 可用cond
或rcond
来判断矩阵的良态。 前者的范围是 1 到正无穷,1 表示完美良态。 后者从 0 到 1 ,0 表示完美良态。rcond
的计算比较不准确,但速度快。 希尔伯特矩阵是非常病态的。 -
当
A
不是方阵,无法求逆。可以使用 伪逆$A^+$
$A^+=(A^TA)^{-1}A^T \quad m>n$
$A^+=A^T(AA^T)^{-1} \quad m<n$,此公式要求A是满秩的。
当然不满秩也能求,$A^+=VS^TSV^T \quad s.t. \quad [U,S,V]= svd(A)$。
使用pinv
即可自动求伪逆而不用关心是否满秩和m、n的大小。
伪逆常用于求解超定或者欠定方程组,但其实\
符号已经包括了这个功能。
要求非负的解可用lsqnonneg
,这是一个非负的最小二乘问题。 -
稀疏矩阵
-
sparse(A)
将A
转化为稀疏形式,当然前提是A
本身是稀疏的。full
是逆过程。 -
issparse
可判断函数是否稀疏。 -
nnz
给出矩阵中非0元素个数。 -
sprandn
、sprandsys
、sprandn
分别生成稀疏正态分布随机矩阵、稀疏随机对称矩阵、稀疏正态分布随机整数矩阵。 -
利用稀疏矩阵能极大加速运算。
-
-
eig
用于求特征值。eigs
求部分特征值。
3. 非线性方程组的解
-
二分法
-
不动点(迭代)法
-
牛顿法
fnewton
-
贝尔斯托法
bairstow
-
roots
-
施罗德法
schroder
-
布罗伊登法
broyden
-
fzero
TODO:各种方法的适用场景