MATLAB数值求解用来求方程的根、定积分、函数最小值,以及线性方程组的数值解。手算不好做时,就把问题交给对应的求解函数。
求方程根:fzero
求 sin(x) - x/2 = 0 在 x=1 附近的根:
f = @(x) sin(x) - x/2;
root = fzero(f, 1)root = 1.8955fzero(函数句柄, 初值) 从估计值出发迭代找根。第一个参数是函数本身,不是某次调用的结果,所以常用 @(x) ... 匿名函数。
多项式求根:roots
解 2x^2 + 4x - 4 = 0,把系数从高次到低次排成向量:
p = [2 4 -4];
r = roots(p)r =
0.7321
-2.7321反过来,由根还原多项式用 poly。
求数值积分:integral
算从 0 到 1 的 x^2 积分:
area = integral(@(x) x.^2, 0, 1)area = 0.3333精确值是 1/3 ≈ 0.3333。多维积分可用 integral2、integral3。
求最小值:fminbnd / fminsearch
找 cos(x) 在 [0, 3] 上的最小值点:
[xmin, fmin] = fminbnd(@(x) cos(x), 0, 3)xmin = 3.1416
fmin = -1.0000找到的 x 约等于 π,最小值约 -1。fminbnd 限定区间,fminsearch 不限区间,多变量优化更常用后者。
解方程组:矩阵左除
线性方程组 Ax = b 用 A\b:
% 2x + 3y = 8
% x + y = 3
A = [2 3; 1 1];
b = [8; 3];
x = A \ bx =
1
2数值与符号
| 需求 | 用 |
|---|---|
| 求具体数值解 | fzero / roots / integral / A\b |
| 得到精确代数表达式 | 符号计算(Symbolic Math Toolbox) |
| 高阶微分方程、系统仿真 | ode45 等常微分方程求解器 |
动手练习
- 用 fzero 求
cos(x) = x在 0 附近的根。 - 用 roots 解
x^3 - 6x^2 + 11x - 6 = 0。 - 用 integral 求
sin(x)从 0 到 π 的积分(应接近 2)。 - 用 fminbnd 找
sin(x)+x在 [0, 2π] 的最小值。