Python实例题:使用Python 解数学方程

目录

Python实例题

题目

1. 解代数方程(如一元二次方程)

2. 使用 SymPy 解符号方程

3. 使用 NumPy 解线性方程组

4. 使用 SciPy 解非线性方程

5. 解微分方程

总结

Python实例题

题目

使用Python 解数学方程

1. 解代数方程(如一元二次方程)

对于简单的代数方程,可以直接使用求根公式:

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)

2. 使用 SymPy 解符号方程

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}

3. 使用 NumPy 解线性方程组

对于线性方程组,可以使用 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.]

4. 使用 SciPy 解非线性方程

对于无法用符号方法求解的非线性方程,可以使用 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]

5. 解微分方程

使用 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()

总结

  • 简单代数方程:直接使用求根公式
  • 符号方程:使用 SymPy(支持精确解)
  • 线性方程组:使用 NumPy(高效数值解)
  • 非线性方程:使用 SciPy 的 fsolve(数值近似解)
  • 微分方程:使用 SciPy 的 odeint(数值积分)

你可能感兴趣的:(实例,python,开发语言)