我有以下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
答案 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