主要内容

求解代数方程

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 = 

(-b+b2-4ac2a-b-b2-4ac2a)

solx 为包含该二次方程的两个解的符号向量。如果输入 eqn 为表达式而非方程,solve 将求解方程 eqn == 0

要关于 x 以外的变量求解,请指定该变量。例如,关于 b 求解 eqn

solb = solve(eqn,b)
solb = 

-ax2+cx

如果您未指定变量,solve 会使用 symvar 来选择要关于哪个变量进行求解。例如,solve(eqn) 关于 x 求解 eqn

返回方程的完整解

solve 不会自动返回方程的所有解。求解方程 cos(x) == -sin(x)solve 函数仅返回众多解中的一个解。

syms x
solx = solve(cos(x) == -sin(x),x)
solx = 

-π4

要返回所有解以及解中的参数和解的条件,请将 ReturnConditions 选项设置为 true。求解同一个方程以获得完整解。提供三个输出变量:关于 x 的解、解中的参数以及解的条件。

syms x
[solx,param,cond] = solve(cos(x) == -sin(x), x, ReturnConditions=true)
solx = 

πk-π4

param = k
cond = kZ

solx 包含关于 x 的解,即 pi*k - pi/4param 变量指定解中的参数,即 kcond 变量指定解的条件 kZ,即 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 = 

(-1012)

要求与这些 k 值对应的 x 值,请使用 subsk 代入 solx

xvalues = subs(solx,solk)
xvalues = 

(-5π4-π43π47π4)

要将这些符号值转换为数值以便在数值计算中使用,请使用 vpa

xvalues = vpa(xvalues)
xvalues = 

(-3.9269908169872415480783042290994-0.785398163397448309615660845819882.35619449019234492884698253745965.4977871437821381673096259207391)

可视化并绘制 solve 返回的解

前面的部分使用 solve 求解了方程 cos(x) == -sin(x)。可以使用 fplotscatter 等绘图函数对该方程的解进行可视化。

绘制方程 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 = 

(-0.707106781186547524400844362104850.70710678118654752440084436210485-0.707106781186547524400844362104850.70710678118654752440084436210485)

scatter(xvalues, yvalues)

Figure contains an axes object. The axes object with title Both sides of equation cos(x) = -sin(x) contains 3 objects of type functionline, scatter. These objects represent cos(x), -sin(x).

与预期相符,解出现在两个绘图的交点处。

简化复杂结果并提升性能

如果结果看起来复杂、solve 运行卡顿,或者如果您希望提升性能,请参阅Choose an Approach for Solving Equations Using solve Function

另请参阅

主题