罗兰在MATLAB的艺术

把想法变成MATLAB

请注意

罗兰在MATLAB的艺术已经存档,不会被更新。

简化符号结果

我很高兴介绍客人博客Kai Gehrs。凯是一个开发人员的符号数学工具箱。在这篇文章中他的主要焦点是在特殊符号简化和方程求解方法。

内容

你注意到结果没有被简化的吗?

当使用符号简化符号数学工具箱,你曾经想知道为什么它不应用某些经典著作规则自动返回结果你有兴趣?

其中的一些经典著作的规则是:

只是用简化得到结果在输入不工作:

信谊一个b简化(日志(a) +日志(b))
ans =日志(a) +日志(b)

使用假设变量

当然,我们都知道规则只适用于在适当的数学假设。例如,如果我们假设是积极的,我们会得到期望的结果:

信谊一个b积极的简化(日志(a) +日志(b))
ans =日志(a * b)

摆脱所有先前指定的假设,使用

信谊一个b清晰的

当事情变得更加复杂

这是否意味着设置正确的假设是一个普遍的解决方案吗?哦,不是!

假设作为中间结果出现在一些非常巨大的符号计算的某个地方,让说,MATLAB脚本的第454行。从您的应用程序的上下文中,你知道的是积极的。现在你想要用MATLAB来自动计算的简化形式在第455行。你将如何管理设置正确的假设?

作为一个例子,考虑是类似的

信谊xy= - (x + 1) ^ (1/2) / ((exp (x - y) - sin (x + y)) *(日志((x ^ 2 + 1) / (y ^ 2 + 1)) / exp (y) + (x, y) ^ y +1 / x (x - y) ^));b = (cos (x) * sin (y)) / (x (x - y) ^ * (x + 1) ^ (1/2)) -(exp (x) * (x, y) ^ y) / (exp (y) * (x + 1) ^ (1/2)) +(cos (y) * sin (x)) / (x (x - y) ^ * (x + 1) ^ (1/2)) -(exp (x) *日志((x ^ 2 + 1) / (y ^ 2 + 1))) /(exp (2 * y) * (x + 1) ^ (1/2))——exp (x) /(exp (y) * (x, y) x ^ * (x + 1) ^ (1/2)) +(cos (x) * sin (y) * (x - y) ^ y) / (x + 1) ^ (1/2) +(cos (y) * sin (x) * (x, y) ^ y) / (x + 1) ^ (1/2) +(日志((x ^ 2 + 1) / (y ^ 2 + 1)) * cos (x) * sin (y)) /(exp (y) * (x + 1) ^(1/2)) +(日志((x ^ 2 + 1) /(y ^ 2 + 1)) * cos (y) * sin (x)) / (exp (y) * (x + 1) ^ (1/2));

现在执行的简化命令不似乎是有用的:

S =简化(日志(a) +日志(b));漂亮的(S)
/ y | sin (x + y) sin (x + y) (x - y)日志| - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - + | x 1/2 1/2 \ (x - y) (x + 1) (x + 1) y # 1 sin (x + y) exp (x) (x - y) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # 2 # 2 \ exp (x) # 1 exp (x) | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | + 1/2 x 1/2 | exp (2 y) (x + 1) exp (y) (x - y) (x + 1) / / /日志| - 1/2 ((x + 1) / | (exp (x - y) - sin (x + y)) | | \ \ / # 1 y 1 \ \ \ | - - - - - - + (x - y) + - - - - - - - - - - | | | | exp x (y) | | | \ (x, y) / / / / 2 \ | x + 1 | # 1 =登录| - - - | | 2 | \ y + 1 / 2 = 1/2 exp (y) (x + 1)

假设积极不显著改善结果。原因是我们需要设置这样的假设的表达式积极的。我们可以试着找到合适的假设对于这个示例,但总的来说似乎是一个天才猜什么是合适的。

使用选项IgnoreAnalyticConstraints简化

一个可能的解决问题的办法是忽略某些分析约束,即使用IgnoreAnalyticConstraints选择简化

采用这一选项简化物内部适用下列规定:

  • 所有的值。特别是所有的值,
  • 所有的值。特别是所有的值,
  • 如果标准的数学函数和吗适用于所有的小正数被认为是有效的吗(例如在)。

那这是如何工作在我们的例子吗?

简化(日志(a) +日志(b),“IgnoreAnalyticConstraints”,真正的)
ans = 0

结果是,因为。因此,在上述假设条件下,我们得到了

当然,重要的是要记住,应用的规则IgnoreAnalyticConstraints在一个严格的数学意义上是不正确的。然而,在实践中这些规则常常非常有帮助,得到简单的结果。另一个副作用是,忽略一些分析约束经常帮助你加快你的计算。

文档描述了更多细节IgnoreAnalyticConstraints

使用IgnoreAnalyticConstraints方程求解

毫不奇怪的概念忽略分析约束方程解决也是说得通的。想象一下你想解决方程。忽视分析约束肯定会想写成。假设为非零最后,

不使用任何限制,符号数学工具箱返回结果:

信谊xn解决(日志(x ^ n), x)
警告:解决方案是参数化的符金宝搏官方网站号:k = Z_相交Dom:间隔([1 /(2 *再保险(1 / n))), 1 /(2 *再保险(1 / n))) ans = 1 / exp((π* k * 2 *我)/ n)

所以你会得到一个强烈取决于值的参数化方案。例如,这是合理的,因为你得到了四种解决方案金宝搏官方网站

解决(日志(x ^ 4), x)
ans = 1我我

而对于只有一个解决方案:

解决(日志(x ^ (1/2)), x)
ans = 1

应用IgnoreAnalyticConstraints我们得到了

解决(日志(x ^ n), x,“IgnoreAnalyticConstraints”,真正的)
ans = 1

也为方程涉及的根,没有额外的符号参数存在,它可能是有用的应用IgnoreAnalyticConstraints让简单的结果:

解决(x ^(5/2) - 8 ^(信谊(10/3)),“IgnoreAnalyticConstraints”,真正的)
ans = 16

这里的解算器期间削减内部简化和忽略了分支,因此,只返回一个解决方案。

看到MATLAB文档页面解决为进一步的细节。

IgnoreAnalyticConstraints选项还可以用于其他符号数学工具箱函数的函数int做象征性的集成。相关的选项也可用MuPAD笔记本接口功能。

你有试过IgnoreAnalyticConstraints吗?

你有试过的IgnoreAnalyticConstraints选择更简单,更短,更容易处理结果?

请让我知道在这里




使用MATLAB®7.13发表


  • 打印
  • 发送电子邮件

评论

留下你的评论,请点击在这里MathWorks账户登录或创建一个新的。