Skip to content

MATLAB - 线性代数

MATLAB 及其符号数学工具箱提供了强大的工具,用于符号求解、操作和分析代数表达式。这使您能够像在纸上一样处理数学表达式,而不受数值的限制。

本教程重点介绍使用符号变量的现代推荐工作流程。

虽然 MATLAB 有内置的符号数学工具箱,但 Octave 需要外部的 ‘symbolic’ 包(pkg load symbolic)。语法也可能有所不同。本教程主要涵盖现代 MATLAB 语法。对于数值求解多项式方程,Octave 的 roots 函数等同于 MATLAB 的相应功能。

任何符号工作流程的第一步是声明您将使用的变量为符号变量。syms 命令是实现此目的最方便的方式。

% 声明符号变量 x 和 y
syms x y
% 创建一个符号表达式
expr = (x - y) * (x + y)

solve 函数是求解符号方程的主要工具。现代方法是使用双等号 == 定义方程。

syms x
% 定义一个二次方程
eq = x^2 - 7*x + 12 == 0;
% 求解 x 的方程
sol = solve(eq, x)
% 预期输出:
sol =
3
4

如果您不指定方程的右侧,solve 函数会假定表达式等于零。

syms a b t
% 求解变量 't' 的方程 'a*t + b = 0'
sol_t = solve(a*t + b, t)
% 预期输出:
sol_t =
-b/a

您可以通过以向量形式提供方程来求解方程组。

syms u v
% 定义方程组
eqs = [5*u + 2*v == 1, u - v == 4];
% 求解 u 和 v。解以结构体形式返回。
sol = solve(eqs, [u, v])
% 访问解
disp(['Solution for u: ', char(sol.u)])
disp(['Solution for v: ', char(sol.v)])
% 预期输出:
sol =
struct with fields:
u: [1x1 sym]
v: [1x1 sym]
Solution for u: 9/7
Solution for v: -19/7

对于没有简单符号解的方程,solve 可能会返回一个复杂的表达式。您可以使用 double 函数获取数值近似解。

syms x
eq = x^5 + 3*x - 1 == 0;
sol = solve(eq, x);
% 将符号解转换为数值(双精度)值
numeric_sol = double(sol)
% 预期输出(显示一个实数根):
numeric_sol =
0.3328

该工具箱提供了展开、因式分解和简化表达式的函数,这些对于代数操作至关重要。

syms x y
% --- 展开表达式 ---
expr_to_expand = (x + 3)^2 * (y - 1);
expanded_expr = expand(expr_to_expand)
% 输出:x^2*y - x^2 + 6*x*y - 6*x + 9*y - 9
% --- 因式分解表达式 ---
expr_to_factor = x^3 + y^3;
factored_expr = factor(expr_to_factor)
% 输出:(x + y)*(x^2 - x*y + y^2)
% --- 简化表达式 ---
expr_to_simplify = (x^2 - 1) / (x - 1);
simplified_expr = simplify(expr_to_simplify)
% 输出:x + 1
% --- 针对某个变量合并同类项 ---
expr_to_collect = x*y + y*x^2 - x*z - z*x^2;
% 合并 x 的系数
collected_expr = collect(expr_to_collect, x)
% 输出:(y - z)*x^2 + (y - z)*x

求解数值系统:反斜杠运算符(“)

Section titled “求解数值系统:反斜杠运算符(“)”

对于具有数值系数的线性方程组,使用反斜杠运算符(“)进行矩阵除法比符号 solve 函数效率高得多。

求解系统 Ax = b:

% 方程组:
% 2x + 4y - z = 10
% 3x - y + 2z = 5
% x + 2y + 3z = 12
% 系数矩阵 A
A = [2, 4, -1;
3, -1, 2;
1, 2, 3];
% 右侧向量 b
b = [10; 5; 12];
% 求解 x(一个包含 [x; y; z] 的向量)
x_sol = A \ b
% 预期输出:
x_sol =
2.5926
1.6296
1.5185
  • 使用 syms:始终使用 syms 声明变量,以实现现代符号工作流程。
  • 方程使用 ==:使用双等号为 solve 定义方程。
  • 选择正确的工具:符号问题使用符号 solve,数值系数的线性系统使用数值 “ 运算符。后者快得多。
  • 简化结果:使用 simplify 或 expand 使您的符号结果更具可读性。