符号变量函数的化简

MATLAB学习记录——符号变量函数的化简

对于复杂的符号变量函数,我们大多希望他能有一个清晰简洁的表达式,以下记录我在学习过程中遇到的问题及解决方法。


文章目录

  • MATLAB学习记录——符号变量函数的化简
  • 前言
  • 一、simplify()函数
    • 1、简单应用simplify()
    • 2、simplify(X,'IgnoreAnalyticConstraints', true)
    • 3、simplify(X,'steps',values,......)
    • 4、simplifyFraction(A)
        • 记录至此,在解决问题的路上真是遇到越来越多的问题,悲伤~


前言

对于符号变量表达式的化简,大多数情况都可以使用“simplify()”函数进行化简,simplify()函数功能强大,但有时候也会犯抽,需要进行调整。


一、simplify()函数

1、简单应用simplify()

对于简单的表达式,笔者常直接使用simplify(表达式) 进行化简,一般能取得不错的结果。

syms x y f(x,y)
f = x^2 + y^2 + y*sin(x)^2/x + y/x*cos(x)^2 + (6*x + 1*y^3)*x
%直接应用simplify函数化简
simplify(f)

结果如下图,三角函数可做一定化简,进行合并。
符号变量函数的化简_第1张图片

2、simplify(X,‘IgnoreAnalyticConstraints’, true)

对于部分稍复杂的符号变量表达式,可以使用“忽视分析限制”以达到一个更好的结果。
例子暂且不放了,如果你觉得简单应用 simplify 函数无法达到一个较好的效果时,可以使用这个option。
对于一些人类觉得应该化简,而MATLAB却顽强地不肯化简的式子,可以使用“steps”这个option。

3、simplify(X,‘steps’,values,…)

默认情况下,simplify 仅使用一个step进行化简。通过增加steps的数量,一般可以获得更简洁的结果。
对于标题中省略号的部分,可以自己help搜索查看一下,其中的option其实和小标题2差不多。
以下这个例子说明了提升steps数量的有效性,但是当steps数量过多,且式子十分复杂时,MATLAB可能会跑不动(笔者有个复杂的式子跑了三个小时都没化简出来):

syms x y f(x,y)
A = f*cos(x)^2 - f
B = simplify(f)
C = simplify(A,"IgnoreAnalyticConstraints",true)
D = simplify(A,"Steps",7,"IgnoreAnalyticConstraints",true)
E = simplify(A,"Steps",8,"IgnoreAnalyticConstraints",true)

结果如下,经过对比,可以很明显地发现,对于1-cos(x)^2这种式子,MATLAB也需要一定化简步数来进行简化。
符号变量函数的化简_第2张图片

4、simplifyFraction(A)

对于MATLAB另外一种倔强的抵抗,比如分子分母有公因式,却始终不肯化简,你可以在使用完上述函数之后,再添加一行这个函数。simplifyFraction作用为简化有理表达式,使分子和分母没有共同的除数。

%......
%省略部分代码,以下代码仅截取我的代码的一部分
N = PC./PC_mag
N1 = simplify(N,"Steps",300,"IgnoreAnalyticConstraints",true)
N2 = simplifyFraction(N1)

N的部分表达式为:可以看出其中有众多替代符号
符号变量函数的化简_第3张图片
化简后,N1的部分表达式:咳,你们可能觉得更复杂了,但N1表达式只有四个替代符号,且经过我的对比,表达式确实化简了。同时,你们可以发现第一项的分子分母均有公因式4,但却没有约掉,所以使用simplifyFraction(N1)。
符号变量函数的化简_第4张图片
N2表达式如下图,可以发现,公因式约掉了。
符号变量函数的化简_第5张图片

记录至此,在解决问题的路上真是遇到越来越多的问题,悲伤~

你可能感兴趣的:(MATLAB学习,matlab)