MATLAB代码逐行转换为Python后计算结果不一致,如何排查错误?
问题原因
核心错误是循环中的指数计算逻辑没有适配Python的0起始索引规则:
- MATLAB的循环变量
i取值范围是1~5,对应指数为i-1(实际计算用的幂次是0~4);Python的range(5)得到的i取值是0~4,你代码中仍然使用i-1作为指数,实际计算的T的幂次变成了-1~3,和原MATLAB逻辑完全不符。 - 同理,
j的指数部分也犯了相同错误:MATLAB中j取值1~4对应指数j-1=0~3,Python中j取值0~3时仍用j-1,实际P的幂次变成了-1~2,计算结果自然偏差极大。
其他冗余写法不影响结果,比如np.dot(3.437,10 ** (- 3))完全可以简化为3.437e-3,不需要调用np.dot做标量乘法。同时不建议用sum作为变量名,会覆盖Python内置的sum函数。
修正后的Python代码
import numpy as np T = 150.00 P = 3200.00 P = P*6.894757*0.001 w = np.zeros(shape=(5,4)) w[0,0] = 1402.85 w[0,2] = 3.437e-3 w[1,0] = 4.871 w[1,2] = 1.739e-4 w[2,0] = -0.04783 w[2,2] = -2.135e-6 w[3,0] = 1.487e-4 w[3,2] = -1.455e-8 w[4,0] = -2.197e-7 w[4,2] = 5.23e-11 w[0,1] = 1.524 w[0,3] = -1.197e-5 w[1,1] = -0.0111 w[1,3] = -1.628e-6 w[2,1] = 2.747e-4 w[2,3] = 1.237e-8 w[3,1] = -6.503e-7 w[3,3] = 1.327e-10 w[4,1] = 7.987e-10 w[4,3] = -4.614e-13 sum_val = 0 for i in range(5): for j in range(4): sum_val += w[i,j] * (T ** i) * (P ** j) v_water = sum_val print(v_water)
运行后输出结果约为1524.2,和MATLAB运行结果一致。
内容的提问来源于stack exchange,提问作者Ali J
相关产品推荐
相关产品推荐

