Matlab数值计算

读书笔记

Posted by icbcbicc on November 13, 2016

Matlab数值计算

1. Matlab常用函数补充

其他

  • ... 表示一行未结束,换行。

数据结构

  • cell创建元胞,访问元胞用{ }

  • struct创建结构体,它是有名字的元胞。

矩阵

  • A(end) 可以访问数组最后的一个元素。

  • randrandnrandi 产生的随机数分别为均匀随机分布、正态随机分布、均匀随机分布整数。

  • diag 对角矩阵,blkdiag 对角块矩阵。

  • sqrtm 矩阵的主平方根。

  • hilb希尔伯特矩阵。

  • hadamard阿达马(Hadamard)矩阵。

  • wilkinson威尔金森(Wilkinson)矩阵。

  • gallery可用于生成多种特殊的矩阵。

字符串

  • findstrstrrep 分别为字符串种查找字串、替换字串。

2维绘图

  • fplot 画图时自动确定采样频率。

  • y=@(t) sin(x.^3) 定义了一个匿名函数。

  • xlimylim 限制了坐标轴的显示范围,常用于看图像的局部。

3维绘图

  • meshgrid 生成一个2维的完全点集。

  • surflcontourcontourf 分别表示曲面、三维等高线、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中元素微小的变化都会导致解的巨大变化,在近似解时会很大的影响精度。 可用condrcond来判断矩阵的良态。 前者的范围是 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元素个数。

    • sprandnsprandsyssprandn分别生成稀疏正态分布随机矩阵、稀疏随机对称矩阵、稀疏正态分布随机整数矩阵。

    • 利用稀疏矩阵能极大加速运算。

  • eig用于求特征值。eigs求部分特征值。

3. 非线性方程组的解

  • 二分法

  • 不动点(迭代)法

  • 牛顿法 fnewton

  • 贝尔斯托法 bairstow

  • roots

  • 施罗德法 schroder

  • 布罗伊登法 broyden

  • fzero

TODO:各种方法的适用场景

4. 函数拟合