最近因为在试着用 MATLAB 做数学题,钻研了一下 MATLAB 的一些符号化简方法,现做如下总结
如果要看化简符号表达式的部分,请看最后!!!
如果要看化简符号表达式的部分,请看最后!!!
如果要看化简符号表达式的部分,请看最后!!!
实时脚本
首先,强烈建议在做符号计算的时候,使用实时脚本。它能很清晰的展示数学符号。比如说:
而普通的脚本就显得非常丑陋
新建一个实时脚本的方法就是在左上角这里,点 新建
- 实时脚本
LaTeX语言
众所周知,我们推导数学符号的时候,经常会遇到希腊字母,比如 α , β , γ \alpha,\beta,\gamma α,β,γ ,而MATLAB的实时脚本是支持直接展示希腊字母的,比如:
只要你能知道
α
\alpha
α 对应的英文是 alpha,你就可以利用这种方法,优雅的展示希腊字母了。
那如果知道这样的对应关系呢,你可以在这里找到 latex希腊字母表
整理数学表达式
为了解决符号化简这个问题,我查过了很多资料,在CSDN上看到了这两个比较有价值的博客
Matlab常用命令之(一):符号表达式化简
Matlab化简符号表达式
但是里面的一些函数已经不再能用了,而且博客里没有很直观的例子,现对他们两篇文章进行总结。(事实上,如果你看完下面的,就不用再看那两篇了)
-
pretty(f)
(不推荐)是一种使用纯文本格式来输出数学表达式的方式。有点不好表述它具体的作用,看个例子就知道了
对我而言这实在是太丑了,除非只能用纯文本格式,不然一律不要使用此函数。更优雅的方式就是使用实时脚本提供的数学渲染。
此函数在几年前没有实时脚本的时候还能拿出来做一下美化,现在有了实时脚本,真的不要用这个。 -
collect(f)
这个函数可以把数学表达式按某一变量的降幂排列
-
expend(f)
这个函数可以把数学表达式展开。
-
factor(f)
这个函数可以做因式分解
-
horner(f)
这个函数可以把多项式函数写成嵌套的形式(秦九韶算法)
-
subexpr
和simple
这两个函数已经不再适用了
符号化简
下面我隆重介绍一个 MATLAB 函数:simplify
,他的功能非常强大。不过使用起来有一些麻烦。
如果我们想化简一个表达式,首先就要尝试一下直接使用 simplify(f)
,如下例所示。
但是在这种情况下,matlab不会自动化简
x
2
\sqrt{x^2}
x2。这是为了避免一些特殊情况下,比如复数的时候出错。
这时,我们可以将参数值 IgnoreAnalyticConstraints
设定为 true
(如下所示)
不过应当注意的是,即便我们的x是一个标量,一个数,
x
2
\sqrt{x^2}
x2 也应当等于
∣
x
∣
|x|
∣x∣,而题目中直接化成了
x
x
x。因此要小心使用这个方法,避免后续推导出错。
还有一种情况,比如
f
=
1
−
cos
(
x
)
2
f=1-\cos(x)^2
f=1−cos(x)2,在这种情况下,matlab不会把他化简成
sin
(
x
)
2
\sin(x)^2
sin(x)2。不过,我们可以通过设置参数 Steps
为 10
,意思为,尝试更多化简次数。
使用这种方法,就可以正常化简啦
写在后面:
符号运算这块还是挺复杂的,因为现在也没有一个非常牛逼的算法。有的不定积分题目,人能手算出来,计算机却不行。如果matlab行不通的话,可以在mathematic上试下。
另外,文中大多数内容来自官方文档,我只是做了一个转运,放到中文社区,方便惯用语为中文的小伙伴检索。如果可以的话,还是建议大家多看看官方文档,里面写的比我这个好一百倍捏。
MATLAB:simplify
2022/5/30 21点01分