目录
LU分解和恰定方程的解
LU分解
- [L,U] = lu(X),其中x是任意方阵,L是下三角矩阵,U是上三角矩阵,满足LU=X
- [L,U,P] = lu(X),其中x是任意方阵,L是下三角矩阵,U是上三角矩阵,P是置换矩阵,满足:PX=LU
- Y = lu(X),下三角矩阵和上三角矩阵合并在Y中给出,满足Y = L+U-I,损失置换矩阵P的信息(I是单位矩阵)
恰定方程组的解
对于方程Ax = b,A为n×m矩阵:
- 若n = m,为恰定方程
- 若n > m,为超定方程
- 若n < m,为欠定方程
恰定方程求解方法:
- x = inv(A)*b;A的逆阵乘b
- x = A\b;A左除b,这个方法运算速度快
- x = U(L\b);其中 U(L\b) = (L*U)\b
矩阵特征值和特征向量
- E = eig(A), 求矩阵A的全部特征值,构成向量E.
- [V, D] = eig(A),求矩阵A的特征向量矩阵V和特征对角矩阵D,满足AV=VD,D是一个对角矩阵,其对角线上的元素是特征值,V中的对应列是特征向量
- [V, D] = eig(A, ‘nobalance’),当A中有截断误差数量级相差不大时,该指令更加精确,'nobalance’起误差调节作用
函数的零点
一元函数的零点
可以画图解, 取点函数[xx, yy] = ginput(1); (1表示取一个点), 也可以用函数解
x = fzero(fun, x0); fun是一元函数名, x0表示初始值.
[x, fval, exitflag, output] = fzero(fun, x0, options); options为优化参数选项, 由函数optimset()设定.
fun可以是字符串, 内联函数, M函数文件名的函数句柄.
fzero()只能返回一个局部零点,而不能寻找到所有的零点
多元函数的零点
x = fsolve(fun, x0);
[x, fval, exitflag, output] = fsolve(fun, x0, options);
零点精度由options. TolFun控制, 其缺省值是1.0000e-006.
函数的极值点
一元函数的极小值点
x = fminbnd(fun, x1, x2); x1和x2是区间范围.
x = fminbnd(fun, x1, x2, options);
也可返回[x, fval], x是极小值点, fval是极小值.
以及[x, fval, exitflag]和[x, fval, exitflag, output]
多元函数的极小值
无约束条件
单纯形法:
x = fminsearch(fun, x0); 其他输出形式同上
拟牛顿法:
x = fminunc(fun, x0, options);
[x, fval, exitflag, output, grad, hessian] = …;grad是x处的梯度值, hessian是x处的hessian值.
当函数大于2次时,拟牛顿法更有效; 当函数不连续时,单纯形法更有效.
有约束条件
数值积分
一元函数积分
q = quad(fun, a, b); 自适应Simpson法.
tol默认为10e-6, 可以手动更改. tol, trace, p1, p2均可缺省.
quadl(); lobatto法, 精度更高.
例如:
fun = inline(' 1./(x.^3 - 2 * x- 5)', 'x');%内联函数, 也可用.m文件建立函数
Q1 = quad(fun, 0, 2);
Q2 = quadl(fun, 0, 2);
``
## 多重积分
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200330205811176.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1N1cmVseV9aaHU=,size_16,color_FFFFFF,t_70)
method是积分方法, 缺省时是Simpson法.
例如:
```matlab
Q = dblquad(@(x, y)(y*sin(x) + x*cos(y)), pi, 2*pi, 0, pi);
或通过.m文件建立函数:
.m文件:
function z = func1(x,y);
z = y*sin(x) + x*cos(y);
保存后输入命令:
Q = dblquad(@func1, pi, 2*pi, 0, pi);
常微分方程
刚性; 特征值相差非常大就是刚性的, 否则就是非刚性的. 但是我们无法直接判断它是刚性的还是非刚性的, 因此, 可以用刚性函数解一下, 如果解不出来, 再换非刚性函数.
[t, y] = solver(odefun, tspan, y0, options);
[t, y, te, ye, ie] = solver(odefun, tspan, y0, options);
其中
- solver为ode系列命令中的任意一个,
- tspan是微分时间段;
- y0是初值;
- odefun是显式一阶常微分方程 y’ = f(t, y); 若为高阶微分方程, 则必须将其化为一阶形式.