【Matlab】

[toc]

A 数值微分与数值积分

A.a数值微分(diff)

<1>数值差分与差商
任意函数(六)【Matlab】数值微积分与方程求解 - 图1#card=math&code=f%28x%29)在(六)【Matlab】数值微积分与方程求解 - 图2点的导数是通过极限定义的:
(六)【Matlab】数值微积分与方程求解 - 图3
(六)【Matlab】数值微积分与方程求解 - 图4

(六)【Matlab】数值微积分与方程求解 - 图5

<2>数值微分的实现
MATLAB提供了求向前差分的函数diff,其调用格式有三种:

  • dx=diff(x):计算向量x的一阶向前差分,dx(i)=x(i+1)-x(i),i=1,2,...,n-1
  • dx=diff(x, n) :计算向量x的n阶向前差分。例如:diff(x, 2)=diff(diff(x))
  • dx=diff(A,n,dim):计算矩阵A的n阶差分,dim=1时(默认状态),按列计算差分;dim=2时,按行计算差分。

计算差分之后,可以计算(六)【Matlab】数值微积分与方程求解 - 图6在某点的差商,计算(六)【Matlab】数值微积分与方程求解 - 图7#card=math&code=f%27%28x%29)的近似值。
例子:
(六)【Matlab】数值微积分与方程求解 - 图8

A.b 数值积分

<1>数值积分基本原理
牛顿-莱布尼茨公式:
(六)【Matlab】数值微积分与方程求解 - 图9
按积分区间[a, b]分成n个子区间(六)【Matlab】数值微积分与方程求解 - 图10,其中(六)【Matlab】数值微积分与方程求解 - 图11,这样求定积分的问题就分解为下面的求和问题:

(六)【Matlab】数值微积分与方程求解 - 图12

<2>数值积分的实现

  • 基于自适应辛普森方法:[l.n]=quad(filename, a, b, tol, trace)
  • 基于自适应Gauss-Lobatto方法:[l, n]=quadl(filename, a,b,tol, trace)

其中,filename是被积函数名;a和b分别是定积分的上限和下限,积分限[a, b]必须是有限的,不能是无穷大;tol用来控制积分精度,默认时取(六)【Matlab】数值微积分与方程求解 - 图13;trace控制是否展现积分过程,若取非0则展现积分过程,取0则不展现,默认trace=0;返回参数I即定积分的值。n为被积函数的调用次数。

例子:
(六)【Matlab】数值微积分与方程求解 - 图14

  • 基于全局自适应积分方法
    I=integral(filename,a,b)
    其中,I是计算得到的积分;filename是被积函数;a和b分别是定积分的下限和上限,积分限可以是无穷大

(六)【Matlab】数值微积分与方程求解 - 图15

  • 基于自适应高斯-克朗罗德方法
    [I,err]=quadgk(filename, a, b)
    其中,err返回近似误差范围,其他参数的含义和用法与quad函数想相同。积分上下限可以是无穷大,也可以是复数。如果积分上下限为复数,则quadgk函数在复平面上求积分。

例子:
(六)【Matlab】数值微积分与方程求解 - 图16

  • 基于梯形积分
    (六)【Matlab】数值微积分与方程求解 - 图17

(六)【Matlab】数值微积分与方程求解 - 图18

例子:
(六)【Matlab】数值微积分与方程求解 - 图19
<3>多重定积分的数值求解
(六)【Matlab】数值微积分与方程求解 - 图20

例子:
(六)【Matlab】数值微积分与方程求解 - 图21

B 线性方程组求解

B.a 直接法

  • 高斯消去法
  • 列主元消去法
  • 矩阵的三角分解法

<1>利用左除运算符直接解法
Ax=b ====> x=A\b
注意:如果矩阵A是奇异的或者接近奇异的,则MATLAB会给出警告信息。

(六)【Matlab】数值微积分与方程求解 - 图22

<2>利用矩阵分解求解线性方程组
1 LU分解
LU分解的基本方法:
(六)【Matlab】数值微积分与方程求解 - 图23

MATLAB的LU分解函数:
[L,U]=lu(A):产生一个上三角阵U和一个变换形式的下三角阵L,使之满足A=LU。注意,这里的矩阵A必须是方阵。
[L,U,P]=lu(A):产生一个上三三角阵U和一个下三角阵L以及一个置换矩阵P,使之满足PA=LU。同样,矩阵A必须是方阵。

用LU分解求解线性方程组:
(六)【Matlab】数值微积分与方程求解 - 图24

(六)【Matlab】数值微积分与方程求解 - 图25

2 QR分解
3 Cholesky分解

B.b 迭代法

(六)【Matlab】数值微积分与方程求解 - 图26

(六)【Matlab】数值微积分与方程求解 - 图27

jacobi.m

  1. function [y,n]=jacobi(A,b,x0,ep)
  2. D=diag(diag(A)); % 对角阵
  3. L=-tril(A,1);
  4. U=-triu(A,1);
  5. B=D\(L+U);
  6. f=D\b;
  7. y=B*x0+f;
  8. n=1;
  9. while norm(y-x0)>=ep
  10. x0=y;
  11. y=B*x0+f;
  12. n=n+1;
  13. end

(六)【Matlab】数值微积分与方程求解 - 图28
gauseidel.m

  1. function [y,n]=jacobi(A,b,x0,ep)
  2. D=diag(diag(A)); % 对角阵
  3. L=-tril(A,-1);
  4. U=-triu(A,1);
  5. B=(D-L)\U;
  6. f=(D-L)\b;
  7. y=B*x0+f;
  8. n=1;
  9. while norm(y-x0)>=ep
  10. x0=y;
  11. y=B*x0+f;
  12. n=n+1;
  13. end

例子:
(六)【Matlab】数值微积分与方程求解 - 图29
有时候高斯-赛德尔迭代法求解线性方程组可能不收敛。
(六)【Matlab】数值微积分与方程求解 - 图30
(六)【Matlab】数值微积分与方程求解 - 图31

C 非线性方程求解与函数极值计算

C.a 非线性方程数值求解

<1>单变量非线性方程求解
函数的调用格式:x=fzero(filename, x0)
其中,filename是待求根方程左端的函数表达式,x0是初始值。

(六)【Matlab】数值微积分与方程求解 - 图32
<2>非线性方程组的求解
函数的调用格式为:
x=fsolve(filename, x0, option)
其中,x为返回的近似解,filename是待求根方程左端的函数表达式,x0是初值,option用于设置优化工具箱的优化参数,可以调用optimset函数来完成。

(六)【Matlab】数值微积分与方程求解 - 图33

C.b函数极值的计算

  • 极大值(最大值)
  • 极小值(最小值)

Matlab只考虑最小值问题的计算,如果要求(六)【Matlab】数值微积分与方程求解 - 图34#card=math&code=f%28x%29)的最大值,可以求(六)【Matlab】数值微积分与方程求解 - 图35#card=math&code=-f%28x%29)的最小值
<1>无约束最优化问题
无约束最优化问题的一般描述为:
(六)【Matlab】数值微积分与方程求解 - 图36
求最小值点和最小值的函数:
[xmin, fmin]=fminbnd(filename, x1, x2, option)
[xmin, fmin]=fminsearch(filename, x0, option)
[xmin, fmin]=fminunc(filename, x0, option)
fminbnd:一元函数
fminsearch:单纯形法。多元
fminunc:拟牛顿法。多元

其中,filename是定义的目标函数。第一个函数的输入变量x1、x2分别表示被研究区间的左右边界。后两个函数的输入变量x0是一个向量,表示极值点的初值。option为优化参数,可以通过optimset函数来设置。

(六)【Matlab】数值微积分与方程求解 - 图37

(六)【Matlab】数值微积分与方程求解 - 图38

<2>有约束最优化问题
有约束最优化问题的一般描述为:
(六)【Matlab】数值微积分与方程求解 - 图39
(六)【Matlab】数值微积分与方程求解 - 图40
约束条件可细化为:

  • 线性不等式约束
  • 线性等式约束
  • 非线性不等式约束
  • 非线性等式约束
  • x的上界和下界

求有约束条件下的最小值的函数为:
[xmin, fmin]=fmincon(filename, x0, A, b, Aeq, beq, Lbnd, Ubnd, Nonf, option)
其中,xmin, fmin,filename,x0和option的含义与求最小值函数相同。其余参数为约束条件,包括线性不等式约束、线性等式约束、x的下界和上界以及定义非线性约束的函数。如果某个约束不存在,则用空矩阵表示。

AX <= b(线性不等式约束,如果是约束是大于,则左右乘-1)
AeqX = beq(线性等式约束)
G(x) <= 0(非线性不等式约束)
Ceq(X) = 0(非线性等式约束)
Lbnd <= X <= Ubub(变量约束)

(六)【Matlab】数值微积分与方程求解 - 图41

D 常微分方程数值求解

D.a常微分方程数值求解的一般概念

(六)【Matlab】数值微积分与方程求解 - 图42
(六)【Matlab】数值微积分与方程求解 - 图43


D.b 常微分方程数值求解函数

(六)【Matlab】数值微积分与方程求解 - 图44
(六)【Matlab】数值微积分与方程求解 - 图45
例子:
(六)【Matlab】数值微积分与方程求解 - 图46
例子:
(六)【Matlab】数值微积分与方程求解 - 图47
(六)【Matlab】数值微积分与方程求解 - 图48


D.c 刚性问题

(六)【Matlab】数值微积分与方程求解 - 图49
(六)【Matlab】数值微积分与方程求解 - 图50
(六)【Matlab】数值微积分与方程求解 - 图51
(六)【Matlab】数值微积分与方程求解 - 图52


图片来源:
https://www.icourse163.org/search.htm?search=中南大学 Matlab#/