Python新手遇方程求解问题:传入Kro/Krw数组无法获取多组fSw值
问题解决:针对数组批量计算fSw值
你的方程可直接通过代数变形得出fSw的表达式,完全不需要用Sympy的solve函数求解:
fSw = 1 / (1 + (KroMeu_w)/(KrwMeu_nw))
你之前用Sympy得到空结果的原因是:Sympy是符号计算库,仅处理符号变量,无法直接兼容numpy数组的数值运算逻辑。当你把numpy数组代入符号方程时,Sympy无法识别数组作为表达式的组成部分,因此返回空列表[]。
正确实现方式(数值计算)
直接用numpy进行数组逐元素运算即可,代码简洁高效:
import numpy as np # 固定参数 Meu_w = 1 Meu_nw = 2.4 # 假设Krw_fitted和Kro_fitted是已定义的列表/数组(替换为你的实际数据) Krw_fitted = [0.1, 0.2, 0.3] Kro_fitted = [0.5, 0.4, 0.3] # 转换为numpy数组 Krw = np.array(Krw_fitted) Kro = np.array(Kro_fitted) # 批量计算fSw数组 fSw = 1 / (1 + (Kro * Meu_w) / (Krw * Meu_nw)) print(f"fSw = {fSw}")
代码说明
- 移除Sympy相关依赖,因为此处不需要符号求解,仅需数值计算。
- numpy支持数组的逐元素运算,所有算术操作会自动作用于数组中的每个元素,最终得到与Krw/Kro长度一致的fSw数组。
若坚持使用Sympy(不推荐)
如果一定要用Sympy处理,需遍历数组中的每个元素逐个求解(效率较低,无必要):
from sympy.solvers import solve from sympy import Symbol import numpy as np Meu_w = 1 Meu_nw = 2.4 fSw = Symbol('fSw') Krw_fitted = [0.1, 0.2, 0.3] Kro_fitted = [0.5, 0.4, 0.3] fSw_results = [] for krw, kro in zip(Krw_fitted, Kro_fitted): equation = fSw - (1 / (1 + (kro * Meu_w)/(krw * Meu_nw))) solution = solve(equation, fSw) fSw_results.append(solution[0]) # 转换为numpy数组 fSw_array = np.array(fSw_results) print(f"fSw = {fSw_array}")
内容的提问来源于stack exchange,提问作者Shaluka Senevirathna
相关产品推荐
相关产品推荐

