【问题标题】:MatLab symbolic output calculationsMatLab 符号输出计算
【发布时间】:2016-03-09 16:11:26
【问题描述】:

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

【问题讨论】:

    标签: matlab


    【解决方案1】:

    看例如结果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
    

    【讨论】:

    • ... 或使用 vpa 获得任意级别的精度。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-21
    相关资源
    最近更新 更多