Python实例题
题目
1. 解代数方程(如一元二次方程)
2. 使用 SymPy 解符号方程
3. 使用 NumPy 解线性方程组
4. 使用 SciPy 解非线性方程
5. 解微分方程
总结
使用Python 解数学方程
对于简单的代数方程,可以直接使用求根公式:
import math
def solve_quadratic(a, b, c):
"""解一元二次方程 ax² + bx + c = 0"""
discriminant = b**2 - 4*a*c
if discriminant > 0:
x1 = (-b + math.sqrt(discriminant)) / (2*a)
x2 = (-b - math.sqrt(discriminant)) / (2*a)
return (x1, x2)
elif discriminant == 0:
x = -b / (2*a)
return (x,)
else:
return () # 无实数解
# 示例:解 x² - 5x + 6 = 0
roots = solve_quadratic(1, -5, 6)
print("方程的根:", roots) # 输出: (3.0, 2.0)
SymPy 是 Python 的符号计算库,可以解各种代数方程:
from sympy import symbols, solve, Eq
# 定义符号变量
x = symbols('x')
# 解一元二次方程 x² - 5x + 6 = 0
equation = Eq(x**2 - 5*x + 6, 0)
roots = solve(equation, x)
print("方程的根:", roots) # 输出: [2, 3]
# 解方程组
y = symbols('y')
eq1 = Eq(2*x + y, 5)
eq2 = Eq(x - y, 1)
solution = solve((eq1, eq2), (x, y))
print("方程组的解:", solution) # 输出: {x: 2, y: 1}
对于线性方程组,可以使用 NumPy 的线性代数模块:
import numpy as np
# 解线性方程组
# 3x + y = 9
# x + 2y = 8
# 系数矩阵
A = np.array([[3, 1], [1, 2]])
# 常数向量
b = np.array([9, 8])
# 求解
solution = np.linalg.solve(A, b)
print("方程组的解:", solution) # 输出: [2. 3.]
对于无法用符号方法求解的非线性方程,可以使用 SciPy 的优化模块:
from scipy.optimize import fsolve
def equation(x):
"""定义方程 f(x) = 0"""
return x**3 - x - 1 # 求解 x³ - x - 1 = 0
# 从初始猜测值 x0=1 开始求解
root = fsolve(equation, 1)
print("方程的根:", root) # 输出: [1.32471796]
使用 SciPy 的积分模块可以解常微分方程(ODE):
from scipy.integrate import odeint
import numpy as np
import matplotlib.pyplot as plt
def model(y, t):
"""定义微分方程 dy/dt = -2y"""
return -2 * y
# 初始条件
y0 = 1
# 时间点
t = np.linspace(0, 5)
# 求解微分方程
y = odeint(model, y0, t)
# 绘制结果
plt.plot(t, y)
plt.xlabel('时间')
plt.ylabel('y(t)')
plt.show()