Python求解4*N方程组:fun函数中return(g)位置是否正确?
问题解答
当前代码里的return(g)位置完全错误,原因如下:
- 它被放在
for i in range(4 * N)的循环内部,第一次循环(i=0)执行完就会直接返回g数组,后面i=1到4N-1的循环根本不会运行。 - 最终返回的
g数组只有g[0]被赋值,其余元素都是初始的0,完全无法生成你需要的4*N个方程。
正确的做法是把return(g)移到外层循环的外面,等所有i对应的方程都计算完毕后再返回。同时可以简化代码里的冗余部分,修正后的代码如下:
def fun(z): g = np.zeros(4 * N) for i in range(4 * N): f_i = 0 for j in range(4 * N): if z[j] != 0: f_i += M_kk[i][j] * z[j] * np.arcsinh(w_c / z[j]) # z[j]为0时f_i保持不变,无需额外处理 g[i] = f_i - z[i] # 所有方程计算完成后再返回结果 return(g) z = fsolve(fun, np.zeros(4 * N))
额外提醒:直接判断z[j] != 0可能会因为浮点数精度问题出现误判,建议改成abs(z[j]) > 1e-10这类极小值判断,避免因浮点数近似0导致的计算异常。
内容的提问来源于stack exchange,提问作者karren lim
相关产品推荐
相关产品推荐

