新手求助:用Python求解指定代数方程以实现自动化计算
求解指定代数方程的Python实现
先把原方程简化:
1.881 + 0.5 = x + ((2.2×2×1)²)/(2×9.81×1²×x²)
简化后得到:
2.381 = x + 19.36/(19.62x²)
方法一:用scipy数值求解非线性方程
Python可以通过scipy.optimize模块的fsolve函数直接求解这类方程,步骤如下:
- 安装依赖(未安装scipy时执行):
pip install scipy
- 编写求解代码:
from scipy.optimize import fsolve def equation(x): left = 1.881 + 0.5 right = x + ((2.2 * 2 * 1)**2) / (2 * 9.81 * (1**2) * (x**2)) return left - right # 传入初始猜测值(可根据计算器结果选附近数值,比如2) solution = fsolve(equation, 2) print(f"方程的解为:{solution[0]:.4f}")
- 代码说明:
equation函数定义了「左边值减右边值」的表达式,求解该表达式等于0的x值就是原方程的解。fsolve需要传入目标函数和初始猜测值,初始值选2是因为原方程的实数解在2附近。
方法二:转化为三次方程求解
将原方程两边乘以x²(x≠0),整理为标准三次方程:
x³ - 2.381x² + 19.36/19.62 = 0
可以用numpy的多项式根求解函数:
import numpy as np # 三次方程系数:x³ -2.381x² +0x + (19.36/19.62) coeffs = [1, -2.381, 0, 19.36/19.62] roots = np.roots(coeffs) # 筛选出实数解(排除复数解) real_root = [root.real for root in roots if np.isclose(root.imag, 0)][0] print(f"方程的实数解为:{real_root:.4f}")
内容的提问来源于stack exchange,提问作者JFran
相关产品推荐
相关产品推荐

