2

我正在尝试评估 MuPAD 中的一些矩阵乘法。输出使用 sigma 作为矩阵元素的占位符,因为它们是长表达式(我认为这就是原因)。有没有办法让 MuPAD 将各个矩阵元素显示为(在我的情况下)它们真正的指数函数,而不管表达式的长度如何?

以下是 MuPAD 使用 sigmas 而不是实际指数函数的示例。我希望能够看到各个矩阵元素的TotT^4真正含义。

示例 MuPAD 方程

我在 MuPAD 界面中执行的命令TotT^4是:

T1 := matrix([[exp((J+B/2)/T),exp(-(J+B/6)/T)],[exp((-J+B/6)/T),exp((J-B/2)/T)]])
T2 := matrix([[exp((J1+B/2)/T),exp(-(J1+B/6)/T)],[exp((-J1+B/6)/T),exp((J1-B/2)/T)]])
T1d := linalg::transpose(T1)
TotT := T1d*T2
4

1 回答 1

0

您的变量的类可以通过type(totT):获得Dom::Matrix。您可能想在文档中查看此类的许多方法。据我所知,这个问题与类print方法的漂亮打印有关。其他类表现出相同的替换,因此它可能是重载的函数print。我无法通过调整setPrintMaxSizePRETTYPRINTTEXTWIDTH或任何可选参数来更改行为print。您仍然可以尝试自己,因为有很多排列。

我也尝试使用该expand功能。expand(TotT,IgnoreAnalyticConstraints)几乎可以工作,尽管如果事情扩展太多,它在某些情况下可能会产生不良影响。调用simplify确实摆脱了替换,但它也通过简化改变了一些条目的性质。它可能也不是这个问题的一般解决方案。

一种可行但很难看的方法是使用expr2textmethod,它以字符串形式返回结果:

expr2text(TotT)

返回

"matrix([[exp((B/6 - J)/T)*exp((B/6 - J1)/T) + exp((B/2 + J)/T)*exp((B/2 + J1)/T), ...
          exp(-(B/2 - J1)/T)*exp((B/6 - J)/T) + exp((B/2 + J)/T)*exp(-(B/6 + J1)/T)], ...
         [exp(-(B/2 - J)/T)*exp((B/6 - J1)/T) + exp((B/2 + J1)/T)*exp(-(B/6 + J)/T), ...
          exp(-(B/2 - J)/T)*exp(-(B/2 - J1)/T) + exp(-(B/6 + J)/T)*exp(-(B/6 + J1)/T)]])"

我认为这个问题是一个很好的问题,可以在Matlab Central上询问,或者如果您有支持许可证,可以提交服务请求。

于 2014-03-18T18:57:59.350 回答