MATLAB数值求解用来求方程的根、定积分、函数最小值,以及线性方程组的数值解。手算不好做时,就把问题交给对应的求解函数。

求方程根:fzero

sin(x) - x/2 = 0 在 x=1 附近的根:

f = @(x) sin(x) - x/2;
root = fzero(f, 1)
root = 1.8955

fzero(函数句柄, 初值) 从估计值出发迭代找根。第一个参数是函数本身,不是某次调用的结果,所以常用 @(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。多维积分可用 integral2integral3

求最小值: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 = bA\b

% 2x + 3y = 8
%  x +  y = 3
A = [2 3; 1 1];
b = [8; 3];
x = A \ b
x =
    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π] 的最小值。