How to| 解方程
Wolfram 语言具有许多强大的功能,使您能够求解多种类型的方程.
可以用 Solve 求解一个方程. 在方程中要使用 "==",而不是 "=":
Solve[ArcSin[x] == 0, x]结果是一个双嵌套列表内部的 Rule. 外层的列表将所有的解包括,而每一个内层列表包括一个单解. 这是方程的三个解:
Solve[x ^ 3 + 3x == 0, x]Solve[{x ^ 2 - 1 == 0, x ^ 2 - 3x + 2 == 0}, x]Solve[{x - y == 0, x ^ 2 + y ^ 2 == 1}, {x, y}]sol = Solve[x ^ 2 + y x + 3 == 0, x]如要使用其中的一个解(此处显示的是第一个解),使用 [[...]](Part 的简写形式)将它从解的列表中提取出来,并使用 /.(ReplaceAll 的简写形式)应用该规则:
x /. sol[[1]]例如,这是 x^2 – y^2 取不同 y 值时的图形,假定第一个解成立:
Plot[x^2 - y^2 /. sol[[1]], {y, Sqrt[12], 10}]在多变量的方程组中,可将一个列表用作第二个参数,求解部分或全部变量:
Solve[{x ^ 2 + y x + 3 == 0, x + y == 1}, {x, y}]对于欠定方程组,Wolfram 语言将把一个结果用其余变量表示:
Solve[{x ^ 2 + y x + z == 0, x + y == 1}, {x, y}]Solve 求的是方程所谓的通用解. 这些解只依赖于在第二个参数中指定的变量. 例如:
Solve[x y == 0, x]不管 y 取何值,x 为零就使方程得以求解. 但仍有另一个解取决于 y: 即 y 为 0. 将 y 添加到第二个参数使得这个解出现:
Solve[x y == 0, {x, y}]另外,还存在一些情形,Solve 不能得到每个解. 例如:
Solve[x + Log[x] == 1 / 2, x]Solve[(1/x) + (1/Sqrt[x]) == 1, x]请注意,在无理方程中 Solve 将舍掉寄生解. 如要查看所有的可能解,包括寄生解在内,需将 VerifySolutions 选项设置为 False:
Solve[(1/x) + (1/Sqrt[x]) == 1, VerifySolutions -> False](1/x) + (1/Sqrt[x]) == 1 /. %//FullSimplify也可使用 Reduce 求解方程:
Reduce[x ^ 3 + 3x == 0, x]Reduce 的输出不同于 Solve 的输出:Reduce 输出的是一个等价于原方程的逻辑表达式,因此它不会漏掉任何一个解:
Reduce[x y == 0, x]Reduce[Cos[x] == 1 / 2, x]例如,您可以将 N 用于 Solve 的输出,得到符号式解的数值近似:
nsol1 = Solve[x^2 + 2x - 7 == 0, x]N[nsol1]也可使用 NSolve 直接得到数值解,这比结合使用 N 和 Solve 的方法要快:
NSolve[x^2 + 2x - 7 == 0, x]用 NSolve 求解一个较为复杂的多项式方程:
poly = 3 + 3x - 7x^2 - x^3 + 2x^4 + 3x^7 - 3x^8 - x^9 + x^10;NSolve[poly == 0, x]也可使用 NSolve 求方程组的数值解. 所用的语法与 Solve 的相同:
NSolve[{x + y == 2, x - 3y + z == 3, x - y + z == 0}, {x, y, z}]如果您的方程只涉及线性方程或多项式,可以使用 NSolve 得到所有解的数值近似. 然而,如果方程涉及更加复杂的函数, 则一般没有系统化步骤可遵循来获得所有的解,即使是数值解也是如此. 这种时候,可以使用 FindRoot 来搜索解.
使用 FindRoot 搜索 x 的数值解,从1开始:
FindRoot[3Cos[x] == Log[x], {x, 1}]