[动力学][地震工程] 一个有趣的问题: SPECTR中的Newmark-Beta法计算反应谱发散?
实干、实践、积累、思考、创新。 一个遗留了好几年的问题,起因是一位网友找了条十分特殊的自己合成波测试 SPECTR 2015 (当时搞选波工具,SPECTR是仿Seismosignal的界面做的),结果发现Newmark法计算的反应谱结果是发散的,之所以说“特殊”,是因为其他波都没出现这个问题(其他波不同方法计算都是重合的),由于一般波测试没问题,而且默认用的逐步精确法,十分稳健,当时没太在意,就去研究其他东西去了,但是问题倒是记录到了word,一直放在硬盘的某个角落,电脑换了几轮,但记录的这个word每次都舍不得删掉,虽然极其碍眼,今天又整理硬盘,又看到了这个word,这次决定把这个word删掉,一次性解决问题,于是打开以前的代码,果然看回好几年前写的代码,写得的确丑,还有点乱,但仔细检查公式倒是没问题,那问题到底出在哪?最后灵机一动,发现问题在加速度的递推公式上,当时采用了增量法的NEWMARK递推公式,各step的加速度均通过上一步的加速度加上加速度增量逐步累加得到,而可能对于这条波,恰好出现了浮点数精度丢失。于是把加速度改为平衡方程反推,果然问题解决了!!!改天更新SPECTR 2022!!! PS:浮点数精度丢失,整型数溢出是编程中很难发现的bug,隐藏最深。Floating point precision lost and integer overflow is a hard-to-find bug in programming. 相关话题 ( Related Topics) [01]. [Tool] SPECTR – A program for Response …