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:各种方法的适用场景