Python调用fsolve求解非线性方程组出现IndexError越界错误如何解决?
错误原因与解决方案
1 直接报错原因
你触发IndexError: index 1 is out of bounds for axis 0 with size 1的核心问题是调用optimize.fsolve时传入的初始猜测值不符合要求:
- 你的
equations函数中一共定义了15个待求解变量(从vars[0]到vars[14]),要求传入的初始猜测值必须是长度为15的数组 - 你代码中
ans= optimize.fsolve(equations, vars)里的vars是Python内置的全局函数,不是你预设的初始值数组,fsolve读取到的初始值长度仅为1,访问vars[1]自然越界。
2 修复步骤
第一步:定义符合长度要求的初始猜测值
你需要根据业务逻辑给15个未知量设置合理的初始猜测,示例如下(你可以根据实际场景调整初始值):
# 初始值顺序对应x1, x2, lambda1_L, lambda2_L, lambda1_U, lambda2_U, mu1, mu2, mu3, mu4, mu5, mu6, mu7, mu8, W1 init_guess = np.array([0.2, 0.2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100]) ans = optimize.fsolve(equations, init_guess)
第二步:修正方程组欠定问题
你当前的equations函数仅返回9个方程,但待求解的未知量有15个,属于欠定方程组,fsolve默认只能求解方程数和未知量数量相等的适定方程组,你需要补全剩余6个方程,或者删除不需要的未知量,否则即使解决索引报错,也无法得到正确的求解结果。
完整修改后参考代码
import numpy as np from scipy import optimize import math def equations(vars): x1 = vars[0] x2 = vars[1] lambda1_L = vars[2] lambda2_L = vars[3] lambda1_U = vars[4] lambda2_U = vars[5] mu1 = vars[6] mu2 = vars[7] mu3 = vars[8] mu4 = vars[9] mu5 = vars[10] mu6 = vars[11] mu7 = vars[12] mu8 = vars[13] W1 = vars[14] sigma_p = math.sqrt(0.028573*x1*x1+0.03129*x2*x2+0.020231*x1*x2) A = (0.028573*x1+0.010115*x2)/sigma_p B = (0.03129*x2+0.010115*x1)/sigma_p eqn1 = 292.7182*lambda1_L+(2.25*A-0.025926)*lambda2_L + 446.444*lambda1_U+(2.25*A-0.040535)*lambda2_U-446.444*mu1-0.405858*mu2+(2*A-0.057146*x1-0.020231*x2)*mu3+mu4-mu5+mu6 eqn2 = 272.9655*lambda1_L+(2.25*B-0.03633)*lambda2_L+513.4587*lambda1_U+(2.25*B-0.051024)*lambda2_U-513.4587*mu1-0.466781*mu2+(2*B-0.06258*x2-0.020231*x1)*mu3+mu4-mu7+mu8 eqn3 = mu1*(W1-446.444*x1-513.4587*x2-33) eqn4 = mu2*(0.13-0.405858*x1-0.466781*x2) eqn5 = mu3*(x1+x2-1) eqn6 = mu5*(0.03-x1) eqn7 = mu6*(x1-0.38) eqn8 = mu7*(0.05-x2) eqn9 = mu8*(x2-0.42) # 注意:此处需要你补充剩余6个方程,才能得到唯一解 return [eqn1, eqn2, eqn3, eqn4, eqn5, eqn6, eqn7, eqn8, eqn9] # 自定义初始猜测值,长度为15 init_guess = np.array([0.2, 0.2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100]) ans = optimize.fsolve(equations, init_guess) print(ans)
内容的提问来源于stack exchange,提问作者Jyoti
相关产品推荐
相关产品推荐

