zoukankan      html  css  js  c++  java
  • 模拟速度慢的原因

    今晚经过测时,发现模拟慢的主要原因有两点:

    1. 计算Hessian

    2. 一维搜索的过程中,需要反复获取内力。而corotational 模型的内力计算需要极分解。


    其中在一般情况下,一维搜索可以快速退出,因此Hessian是主要问题


    而在某些情况下(例如,参数很多的时候,第一帧从静止开始),一维搜索需要很多次,而且通常是失败的。主要时间耗在内力计算。

    这种情况的原因已经查明,就是一些参数根本不会对形状产生影响,因此解方程Ax = b时矩阵A不满秩,而之前采用LU分解的方法解方程,此方法要求矩阵必须满秩,于是解出的值为无效值(+inf)。改用Eigen的 ColPivHouseholderQR 求解器,此求解器不要求矩阵满秩。此后模拟不再出现计算出错的情况(矩阵A某一行全0时,x的对应分量解出也是0)。修复后发现,一维搜索中获取内力的时间显著减少(在0.05秒以下),估计是之前数据不正常(+inf / nan)导致极分解时间显著升高。


    于是主要问题就是Hessian了。下一步打算采用BFGS方法,看看能不能提高速度,同时保证准确性。

  • 相关阅读:
    Golang学习
    Golang学习
    基础知识
    Golang学习
    基础知识
    hyper-v server 2016安装,客户端远程管理
    inotifywait命令
    CENTOS 7发送邮件测试
    NFS学习
    awk命令
  • 原文地址:https://www.cnblogs.com/dydx/p/4222498.html
Copyright © 2011-2022 走看看