不明白为什么从矩阵中检索到的值不能按预期收敛

时间:2019-11-26 01:12:08

标签: python matrix

我目前正在大学里工作,我正在用Python编程 F item V olume M 的方法来解决传热问题。

我需要从矩阵中导入一些数据,其中包含材料特征的值。当我使用常量特性时,即使没有错误的回答,它也可以做得很酷,并且在迭代过程中收敛,而无需矩阵调用。现在我实现了矩阵,结果没有收敛。

我在代码中使用了一个迭代计数器,以防止它在问题中的单个时间步上运行超过1000次。在大多数时间步中,它收敛2或3次迭代,但对于某些时间步,则经历1000次迭代。

对于四个特征,我从矩阵切换为使用方程来生成值,并且它起作用了,但是对于第五个特征,我不能这样做,因为没有简单的方程,所以我真的必须从矩阵中获取它们

由于我正在使用的数据量很大(1GB),因此无法使用numpy.loadtxt()导入。因此,我以列表的形式将其导入,如下所示:

ctot = []
with open('c_TOT.dat', 'r') as f:
    for line in f:
        ctot.append([float(x) for x in line.split(' ')])

稍后,我在此行中调用数据:

cp[i] = ctot[int(100*Ts[i])][int(1000*Hres[i])]

问题

温度(Ts)和磁场(Hres)都不是整数,因此我将它们乘以10的幂以达到所需的精度(例如302.4123ºC)必须变为30241和0.93485T,934,我才能在30241行的第934列中获得该值,该值表示这些条件下的比热)。

我不确定为什么它没有收敛,以及为什么只在问题的中间出现了一些时间。我认为这不可能是精确的,因为它已经太精确了,但是我也没有找到测试它的方法。

如果有更好的方法可以导入或调用矩阵,那么最好知道一下,因为我认为这就是问题所在。

1 个答案:

答案 0 :(得分:1)

在满足分歧条件之前,我恢复了最后3次迭代的结果。事实证明,对该问题的简化(获取值的下限,因此将302.4175ºC的密度视为302.41ºC的密度)确实导致了某些温度值转变的差异。在我恢复了结果的情况下,温度在23.41996ºC和23.42003ºC之间波动,因此,在变化最小的情况下,性能发生了重大变化。 原来没问题,但是物理简化毕竟是无效的。