# NewtonSolver **Repository Path**: xcpcn/newton-solver ## Basic Information - **Project Name**: NewtonSolver - **Description**: 一个基于牛顿迭代法的并行求根工具,用于求解任意可导方程的实根。项目采用纯 Python 实现,不依赖外部库,支持命令行界面 (CLI) 和动态表达式输入。 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-03-18 - **Last Updated**: 2025-03-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 牛顿法求解器项目 该项目基于牛顿迭代法,提供多种方案求解方程: - **求解方法**:原始数值方法 vs. 基于 Sympy 的高精度方法 - **执行模式**:单线程 vs. 多进程加速 - **用户界面**:命令行、Rich 控制台和 Tkinter 图形界面 ## 主要功能 - 使用牛顿迭代法求解各类复杂方程,包括多项式、指数、对数、幂函数和三角函数复合问题。 - 提供自动选择最佳求解器和执行器的智能模式。 - 支持单初始值求解和区间均匀采样求解两种输入模式。 - 内置性能测试模块,对不同方案在重复计算中的耗时进行比较。 ## 安装依赖 - Python 3.6+ - 可选依赖: - `rich`:美化输出(`pip install rich`) - `sympy`:支持高精度计算(`pip install sympy`) - `pathos`:多进程支持(`pip install pathos`) - 其它标准库无需额外安装 ## 使用说明 ### 1. 命令行模式 直接运行主程序: ```bash python script.py [选项] ``` #### 可选参数 ```plaintext --help 显示帮助信息 --expr <表达式> 设置方程表达式 (默认: "x**2 - 2") --start <浮点数> 区间起点 (默认: 配置中的 default_range_start) --end <浮点数> 区间终点 (默认: 配置中的 default_range_end) --step <浮点数> 步长 (默认: 配置中的 default_step) --digits <整数> 保留小数位数 (默认: 配置中的 decimal_places) --multi 使用多线程 (默认: 配置中的 use_multiprocessing) --sympy 使用SymPy高精度计算 (默认: 配置中的 priority_method) --x0 <浮点数> 单初始值 (默认: 配置中的 default_x0) --timeout <整数> 单次计算超时秒数 (默认: 配置中的 timeout_seconds) ``` #### 示例 - 单初始值求解: ```bash python script.py --expr "x**2 - 2" --x0 1 --digits 5 ``` - 区间采样求解: ```bash python script.py --expr "x**2 - 2" --start -5 --end 5 --step 0.5 --multi ``` ### 2. 交互式模式 直接运行程序: ```bash python script.py ``` - 选择“1. 解方程”进入求解模式。 - 输入方程表达式,默认值为 `x**2 - 2`。 - 选择模式(单初始值 `s` 或区间采样 `r`)。 - 根据提示选择是否修改默认配置(从 `newton_config.json` 读取)。 - 支持连续求解多个方程。 ### 3. 配置文件 程序启动时会检查 `newton_config.json`,若不存在则创建默认配置。修改此文件可调整默认设置。 #### 默认配置示例 ```json { "priority_method": "numeric", "sympy_precision": 100, "decimal_places": 3, "use_multiprocessing": false, "output_method": "rich", "default_range_start": -10.0, "default_range_end": 10.0, "default_step": 1.0, "default_x0": 1.0, "timeout_seconds": 5 } ``` - `priority_method`:默认计算方法(`numeric` 或 `sympy`)。 - `sympy_precision`:SymPy 的有效数字位数。 - `decimal_places`:输出保留小数位数。 - `use_multiprocessing`:是否默认启用多线程。 - `output_method`:输出格式(`rich` 或 `plain`)。 - `default_range_start/end/step`:区间采样默认范围和步长。 - `default_x0`:单初始值默认值。 - `timeout_seconds`:单次计算超时时间。 ## 输出示例 ### 使用 `rich`(推荐) ``` 方程 x**2 - 2 的解 ┏━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━┓ ┃ 近似解 ┃ 误差 ┃ 迭代次数 ┃ ┡━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━┩ │ -1.414 │ 6.149e-07 │ 4 │ │ 1.414 │ 9.499e-13 │ 5 │ └────────┴───────────┴──────────┘ ``` ### 无 `rich` ``` 方程 x**2 - 2 的解: 近似解 误差 迭代次数 1.414 0.000e+00 5 -1.414 0.000e+00 5 计算耗时: 0.021 秒 ``` ## 注意事项 - **超时机制**:当前使用 `signal` 实现,仅在 Linux/macOS 上有效。Windows 用户可能需调整为其他超时方案(如 `threading.Timer`)。 - **表达式格式**: - 数值方法支持 Python 可求值的数学表达式(如 `x**2 - 2`, `sin(x)`)。 - SymPy 模式支持 SymPy 可解析的表达式。 - **多线程**:在区间采样模式下启用 `--multi` 可显著提升性能,但内存占用可能增加。 ## 贡献 欢迎提交问题或改进建议!请通过 Issues 联系。