Python如何实现含参数2方程3未知量方程组的参数化求解
Python实现符号方程组参数化求解
问题描述
需要对如下二元方程组做参数化求解,将变量b、c表示为参数a的表达式:
1.182 * a == 4.0 * b + 4.0 a^2 == 4.0 * b * c + 4.0
在MATLAB中可通过如下代码完成求解:
sol = solve(prob,[b,c]);
求解得到的结果为:
b: 0.2956 * a - 1.0 c: (5.629e+14 * a^2 - 2.252e+15) / (6.656e+14 * a - 2.252e+15)
Python实现方案
Python中可通过符号计算库SymPy实现和MATLAB solve完全等价的功能,操作步骤如下:
- 首先安装SymPy依赖,执行命令:
pip install sympy - 编写求解代码,定义符号变量、传入方程组、指定求解变量即可得到结果
完整代码如下:
from sympy import symbols, solve # 定义所有涉及的符号变量 a, b, c = symbols('a b c') # 构造方程组:直接传入移项后等于0的表达式即可,也可以用Eq()显式写等式 eq_group = [ 1.182 * a - 4 * b - 4, a**2 - 4 * b * c - 4 ] # 指定求解目标为b、c,执行求解 solution = solve(eq_group, [b, c]) # 提取结果,默认输出精确分数形式,调用evalf可转为和MATLAB一致的浮点近似形式 b_res = solution[b].evalf(4) c_res = solution[c].evalf(4) print(f"b = {b_res}") print(f"c = {c_res}")
运行上述代码后,输出的b表达式为0.2955*a - 1.0,和MATLAB结果的0.2956差异来自浮点保留位数的截断误差;c的表达式和MATLAB输出的大科学计数法系数分式完全等价,调整浮点保留精度即可得到完全一致的展示效果。
注:如果不需要浮点近似,直接读取
solution[b]和solution[c]就能得到精确的分数形式解析解,精度高于MATLAB默认输出的浮点近似结果。
内容的提问来源于stack exchange,提问作者inquisitive
相关产品推荐
相关产品推荐

