How to运用Mathematica 10| 解方程
Wolfram 语言具有许多强大的功能,使您能够求解多种类型的方程.
可以用 Solve 求解一个方程. 在方程中要使用 "==",而不是 "=":
Out[1]= |
![](http://blog.sina.com.cn/s/-1) |
结果是一个双嵌套列表内部的 Rule. 外层的列表将所有的解包括,而每一个内层列表包括一个单解. 这是方程的三个解:
Out[2]= |
![](http://s3.sinaimg.cn/middle/0023jUfLzy6TMGDd9gC72&690) |
如要求解一个方程组,用一个列表作为第一个参数:
Out[3]= |
![](http://static15.photo.sina.com.cn/middle/0023jUfLzy6TMGDnj4O6e&690) |
这是一联立方程组的两个解;每个解集被包在自己的列表中:
Out[4]= |
![](http://static14.photo.sina.com.cn/middle/0023jUfLzy6TMGDstch3d&690) |
此处的解将一个变量用另外一个变量表示:
Out[5]= |
![](http://static12.photo.sina.com.cn/middle/0023jUfLzy6TMGDrPlNeb&690) |
如要使用其中的一个解(此处显示的是第一个解),使用
(Part 的简写形式)将它从解的列表中提取出来,并使用
(ReplaceAll 的简写形式)应用该规则:
Out[6]= |
![](http://s3.sinaimg.cn/middle/0023jUfLzy6TMGDMgH8e2&690) |
例如,这是
取不同
值时的图形,假定第一个解成立:
Out[7]= |
![](http://blog.sina.com.cn/s/-1) |
在多变量的方程组中,可将一个列表用作第二个参数,求解部分或全部变量:
Out[8]= |
![](http://static15.photo.sina.com.cn/middle/0023jUfLzy6TMGEWTcGde&690) |
对于欠定方程组,Wolfram 语言将把一个结果用其余变量表示:
Out[9]= |
![](http://static13.photo.sina.com.cn/middle/0023jUfLzy6TMGF7oLO8c&690) |
Solve 求的是方程所谓的通用解. 这些解只依赖于在第二个参数中指定的变量. 例如:
Out[10]= |
![](http://s15.sinaimg.cn/middle/0023jUfLzy6TMGFdK3Afe&690) |
不管
取何值,
为零就使方程得以求解. 但仍有另一个解取决于
: 即
为 0. 将
添加到第二个参数使得这个解出现:
![](http://static4.photo.sina.com.cn/middle/0023jUfLzy6TMGFLQpZ73&690)
Out[11]= |
![](http://static4.photo.sina.com.cn/middle/0023jUfLzy6TMGFOpyP13&690) |
另外,还存在一些情形,Solve 不能得到每个解. 例如:
![](http://s2.sinaimg.cn/middle/0023jUfLzy6TMGFSFDb41&690)
Out[12]= |
![](http://static7.photo.sina.com.cn/middle/0023jUfLzy6TMGFUvhsc6&690) |
您也可求解无理方程:
Out[13]= |
![](http://static4.photo.sina.com.cn/middle/0023jUfLzy6TMGG32YX93&690) |
请注意,在无理方程中 Solve 将舍掉寄生解. 如要查看所有的可能解,包括寄生解在内,需将 VerifySolutions选项设置为 False:
Out[14]= |
![](http://static13.photo.sina.com.cn/middle/0023jUfLzy6TMGG4zUM0c&690) |
检查解:
Out[15]= |
![](http://s8.sinaimg.cn/middle/0023jUfLzy6TMGG7vh547&690) |
也可使用 Reduce 求解方程:
Out[16]= |
![](http://static8.photo.sina.com.cn/middle/0023jUfLzy6TMGGb9OLf7&690) |
Reduce 的输出不同于 Solve 的输出:Reduce 输出的是一个等价于原方程的逻辑表达式,因此它不会漏掉任何一个解:
Out[17]= |
![](http://static5.photo.sina.com.cn/middle/0023jUfLzy6TMGGgJik84&690) |
Out[18]= |
![](http://static16.photo.sina.com.cn/middle/0023jUfLzy6TMGGo0Mvdf&690) |
Wolfram 语言同样允许您得到方程的数值解.
例如,您可以将 N 用于 Solve 的输出,得到符号式解的数值近似:
Out[1]= |
![](http://s16.sinaimg.cn/middle/0023jUfLzy6TMGGoocD8f&690) |
Out[2]= |
![](http://static14.photo.sina.com.cn/middle/0023jUfLzy6TMGGra0Z6d&690) |
也可使用 NSolve 直接得到数值解,这比结合使用 N 和 Solve 的方法要快:
Out[3]= |
![](http://static6.photo.sina.com.cn/middle/0023jUfLzy6TMGGuwdLc5&690) |
用 NSolve 求解一个较为复杂的多项式方程:
Out[5]= |
![](http://s6.sinaimg.cn/middle/0023jUfLzy6TMGGEMrbf5&690) |
也可使用 NSolve 求方程组的数值解. 所用的语法与 Solve 的相同:
Out[6]= |
![](http://static3.photo.sina.com.cn/middle/0023jUfLzy6TMGGFyAG02&690) |
如果您的方程只涉及线性方程或多项式,可以使用 NSolve 得到所有解的数值近似. 然而,如果方程涉及更加复杂的函数, 则一般没有系统化步骤可遵循来获得所有的解,即使是数值解也是如此. 这种时候,可以使用 FindRoot 来搜索解.
使用 FindRoot 搜索
的数值解,从1开始: