MATLAB - 线性代数
MATLAB - 符号代数
Section titled “MATLAB - 符号代数”MATLAB 及其符号数学工具箱提供了强大的工具,用于符号求解、操作和分析代数表达式。这使您能够像在纸上一样处理数学表达式,而不受数值的限制。
本教程重点介绍使用符号变量的现代推荐工作流程。
GNU Octave 用户须知
Section titled “GNU Octave 用户须知”虽然 MATLAB 有内置的符号数学工具箱,但 Octave 需要外部的 ‘symbolic’ 包(pkg load symbolic)。语法也可能有所不同。本教程主要涵盖现代 MATLAB 语法。对于数值求解多项式方程,Octave 的 roots 函数等同于 MATLAB 的相应功能。
创建符号变量和表达式
Section titled “创建符号变量和表达式”任何符号工作流程的第一步是声明您将使用的变量为符号变量。syms 命令是实现此目的最方便的方式。
% 声明符号变量 x 和 ysyms x y
% 创建一个符号表达式expr = (x - y) * (x + y)使用 solve 求解代数方程
Section titled “使用 solve 求解代数方程”solve 函数是求解符号方程的主要工具。现代方法是使用双等号 == 定义方程。
求解单个方程
Section titled “求解单个方程”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/7Solution for v: -19/7对于没有简单符号解的方程,solve 可能会返回一个复杂的表达式。您可以使用 double 函数获取数值近似解。
syms xeq = 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
% 系数矩阵 AA = [2, 4, -1; 3, -1, 2; 1, 2, 3];
% 右侧向量 bb = [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使您的符号结果更具可读性。