MatLab符号输出计算

时间:2016-03-09 03:27:49

标签: matlab

我有以下matlab代码,使用符号工具箱来计算非线性函数的Hessian

clc;
syms x1 x2 x3;
f = 4*x1^4*x2^(5/3)*x3^(-5);
h(x1,x2,x3) = hessian(f)
h(1,1,1)
eig(h(1,1,1))

我试图找到Hessian的本征值,以便证明它不是一个正半正定矩阵。

我的问题是输出的格式化方式。我得到的所有计算都是分数而不是小数?我可以在任何地方更改输出小数而不是分数吗? 产量 http://pastebin.com/11HHnmRn

1 个答案:

答案 0 :(得分:2)

看看,例如在结果h(1,1,1)

ans =
    [   48,   80/3,    -80]
    [ 80/3,   40/9, -100/3]
    [  -80, -100/3,    120]

在不失去精确度的情况下,您无法进一步简化80/3。这就是为什么MATLAB Symbolic Toolbox不再对它做任何事情的原因。同样的事情发生在使用sqrt(2),不能再简化了。

如果选择放弃此精度,为了获得小数,并且能够使用MATLAB进行进一步计算,您只需将表达式转换为double精度:

double(h(1,1,1))

ans =
   48.0000   26.6667  -80.0000
   26.6667    4.4444  -33.3333
  -80.0000  -33.3333  120.0000