求解代数方程
Symbolic Math Toolbox™ 同时提供符号方程求解器和数值方程求解器。本主题说明如何使用符号求解器 solve 以符号形式求解方程。要比较符号求解器和数值求解器,请参阅Select Numeric or Symbolic Solver。
求解方程
如果 eqn 为方程,则 solve(eqn,x) 关于符号变量 x 求解 eqn。
使用 == 运算符指定常见的二次方程,并使用 solve 对其求解。
syms a b c x eqn = a*x^2 + b*x + c == 0; solx = solve(eqn, x)
solx =
solx 为包含该二次方程的两个解的符号向量。如果输入 eqn 为表达式而非方程,solve 将求解方程 eqn == 0。
要关于 x 以外的变量求解,请指定该变量。例如,关于 b 求解 eqn。
solb = solve(eqn,b)
solb =
如果您未指定变量,solve 会使用 symvar 来选择要关于哪个变量进行求解。例如,solve(eqn) 关于 x 求解 eqn。
返回方程的完整解
solve 不会自动返回方程的所有解。求解方程 cos(x) == -sin(x)。solve 函数仅返回众多解中的一个解。
syms x
solx = solve(cos(x) == -sin(x),x)solx =
要返回所有解以及解中的参数和解的条件,请将 ReturnConditions 选项设置为 true。求解同一个方程以获得完整解。提供三个输出变量:关于 x 的解、解中的参数以及解的条件。
syms x
[solx,param,cond] = solve(cos(x) == -sin(x), x, ReturnConditions=true)solx =
param =
cond =
solx 包含关于 x 的解,即 pi*k - pi/4。param 变量指定解中的参数,即 k。cond 变量指定解的条件 ,即 k 必须为整数。因此,solve 返回一个周期性解,该解从 pi/4 开始,以 pi*k 为间隔重复,其中 k 为整数。
使用 solve 返回的完整解、参数和条件
您可以使用 solve 返回的解、参数和条件来求某个区间内的解或满足附加条件的解。
要求区间 -2*pi < x < 2*pi 内的 x 值,需在条件 cond 下在该区间内关于 k 求解 solx。使用 assume 假定条件 cond。
assume(cond) solk = solve(-2*pi < solx,solx < 2*pi,param)
solk =
要求与这些 k 值对应的 x 值,请使用 subs 将 k 代入 solx。
xvalues = subs(solx,solk)
xvalues =
要将这些符号值转换为数值以便在数值计算中使用,请使用 vpa。
xvalues = vpa(xvalues)
xvalues =
可视化并绘制 solve 返回的解
前面的部分使用 solve 求解了方程 cos(x) == -sin(x)。可以使用 fplot 和 scatter 等绘图函数对该方程的解进行可视化。
绘制方程 cos(x) == -sin(x) 两边的图。
fplot(cos(x)) hold on grid on fplot(-sin(x)) title("Both sides of equation cos(x) = -sin(x)") legend("cos(x)","-sin(x)",AutoUpdate="off")
计算函数在 x 值处的值,并使用 scatter 将解以点的形式叠加绘制在图中。
yvalues = cos(xvalues)
yvalues =
scatter(xvalues, yvalues)

与预期相符,解出现在两个绘图的交点处。
简化复杂结果并提升性能
如果结果看起来复杂、solve 运行卡顿,或者如果您希望提升性能,请参阅Choose an Approach for Solving Equations Using solve Function。