Mathematica求解方程——Solve、Reduce、NSolve等函数

不能不感叹Mathematica是真的强,但也不得不说Mathematica的各类教程是真的少。基本操作小半天就能上手了,但看着大神给出的那些极度抽象的代码甚至怀疑用的是不是一种程序。

关于MMA和MATLAB求解方程上的差距可以看这样一个例子
https://www.zhihu.com/question/22662349/answer/1297183755
可以看到即便是matlab2020b求得结果还是差点火候。
(不是说matlab处处弱,之前自己也遇到过一个方程matlab表现得比MMA好)

言归正传。
关于解方程,首先看MMA的帮助文档 How to 解方程

1、Solve函数

基本操作

关于MMA中Solve函数的基本应用直接看帮助文档即可。

Solve[expr,vars]
试图求解以 vars 为变量的方程组或不等式组 expr.

Solve[expr,vars,dom]
在定义域 dom 上求解. dom 的常用选择为 Reals、Integers 和 Complexes.

在这里插入图片描述

这里需要指出的是是否需要指出待求变量。
如果只有一个变量要求的话,其实是可以不指定变量的,比如
在这里插入图片描述
但如果有多个变量,则会默认将其中一个作为变量
在这里插入图片描述

指定解范围

如果想求某个范围的解,此时加一个不等式即可,MMA将之认为是一个方程组。
用花括号{}括起来或者用&&链接均可。
在这里插入图片描述

求解包含特殊函数的方程

遇到这个问题最初是要求方程
t e − t 1 F 1 ( − 3 2 ; 2 ; t ) = 0 t e^{-t}{ }_{1} F_{1}\left(-\frac{3}{2} ; 2 ; t\right)=0 tet1F1(23;2;t)=0 其中 1 F 1 ( a ; b ; z ) { }_{1} F_{1}\left(a ; b ; z\right) 1F1(a;b;z) 为第一类合流超几何函数(Confluent Hypergeometric Function of the First Kind),相关介绍可参考特殊函数相关教材或者Wolfram MathWorld网页。这个函数在matlab中用hypergeom(a,b,z)表示(注意不是kummerU(a,b,z)函数)。
但在用MMA对其进行求解的时候却遇到了一系列问题。

1、存在反函数、系数不精确
在这里插入图片描述
对于系数不精确的问题,是要把1.5换成3/2,这点之前确实没注意过。

2、存在反函数、无法求解
把1.5换成3/2
在这里插入图片描述
3、正解
需要指定解的范围。用Solve或Nsolve均可。
在这里插入图片描述

Solve函数可能出现的问题

关于Solve函数可能存在的问题,帮助文档中也给出了说明。
这里列出部分,完整的还请参看帮助文档。
在这里插入图片描述
在这里插入图片描述

2、Reduce函数

还是优先参考帮助文档。
下面内容参考丁大正《Mathematica基础与应用》2.1.4节。

  • Solve[eqns,vars]对系数按常规约定求出方程(组)的全部解。
  • Reduce[eqns,vars]讨论系数出现的各种可能情况,分别求解。

书中还有更多详细内容。

3、Root、FindRoot、Nsolve、Reduce等函数

之后更新
一般来讲FindRoot应该是适用于更复杂的函数。
Nsolve是求数值解。

4、DSolve、RSolve等函数

用 DSolve 求解微分方程
在这里插入图片描述

用 RSolve 求解递归方程
在这里插入图片描述

Guess you like

Origin blog.csdn.net/gsgbgxp/article/details/126060193