最近看《热工流体数值计算》(俞冀阳,2012)中讲了一些典型的偏微分方程求解,按照其差分计算的方法,采用Java语言和Python语言进行了式2-8的求解。数学模型如下:
差分计算时,收敛精度的确定非常重要,必须按照网格的尺度确定收敛精度,
也即,网格尺寸越小,则需要收敛的精度必须越高,不然可能出现修正值被忽略,最终计算结果差异非常大的情况。精度的确定为:while(delta >= 0.01/n/n):
java 的计算速度较快,但是我认为可能需要调整为bigdata进行计算了,防止出现下图中的不规则曲线,当然也可能是由于绘图的原因。经过调试,其原因是因为导出的csv的精度只有两位,改成5位就没事了
BigDecimal
在除法计算的时候,必须控制精度,不然太慢
BigDecimal ap=aw.add(ae).add(an).add(as).divide(new BigDecimal(4),15,BigDecimal.ROUND_HALF_UP);
Python计算结果
Java计算结果