模拟速度慢的原因

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

1. 计算Hessian

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


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


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

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


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

转载于:https://www.cnblogs.com/dydx/p/4222498.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值