各位大神 matlab里边 simplify((a^2)^(1⼀2))不能化简啊 怎么回事~

2025-04-14 22:38:25
推荐回答(1个)
回答(1):

请问你的matlab版本号是多少?

matlab从7.7开始,符号计算引擎从maple改成了mupad。而据说,mupad的计算能力没有maple强。

关于引擎这个问题,可以参考:http://www.matlabsky.com/thread-6061-1-1.html

题外话,如果你要改引擎,建议多找找相关资料。我看过的这些,都是很早以前的东西了。不知道能否适用于matlab更高的版本。

正题。你的计算结果,我猜应该是7.7或者更高的版本计算出来的吧?

我电脑上有两个版本,maple引擎的6.5,和我自己把引擎从mupad改成maple的7.8。我算了两个结果,供参考:

matlab6.5:

>> syms a
simplify((a^2)^(1/2))
 
ans =
 
csgn(a)*a

其中csgn是一个复符号函数,csgn(a)的意思就是取a的符号。可见结果是正确的。

matlab7.8:

>> syms a
simplify((a^2)^(1/2))
 
ans =
 
                             2 0.500000000000000000
                           (a )

7.8直接写出了一个表达式,和matlab6.5结果不同。这应该和我用的是maple14有关系。

但是,如果直接使用simple来计算,结果与matlab6.5相同:

>> simple((a^2)^(1/2))
 
ans =
 
                                   csgn(a) a

随后,附上matlab6.5的simple计算结果:

>> simple((a^2)^(1/2))
 
simplify:
 
csgn(a)*a
 
 
radsimp:
 
a
 
 
combine(trig):
 
(a^2)^(1/2)
 
 
factor:
 
(a^2)^(1/2)
 
 
expand:
 
(a^2)^(1/2)
 
 
combine:
 
(a^2)^(1/2)
 
 
convert(exp):
 
(a^2)^(1/2)
 
 
convert(sincos):
 
(a^2)^(1/2)
 
 
convert(tan):
 
(a^2)^(1/2)
 
 
collect(a):
 
(a^2)^(1/2)
 
 
ans =
 
a

不同的化简方式,得到不同的结果。给出了最终的结果:a。

a如果是负数的话……你也不说是错,这取决于你怎么化简。本来正数开方还两个根呢。


因此,能不能化简取决于matlab版本所用的符号计算引擎。

如此而已。若有不解,欢迎追问。