|
本帖最后由 白冥 于 2025-1-19 05:00 编辑
## 1. 概述
本贴主要给大家介绍一个包含多项式操作的 Python 代码模块。该模块包含了多个函数,旨在为给定多项式计算有理根。通过输入多项式的系数,函数 `polynomials_with_rational_coefficients` 可以求出该多项式的所有有理根。
源代码:
from math import gcd
import itertools
def polynomials_with_rational_coefficients(*k: list[list[int, int]]):
rational_roots = []
leading_coefficient = k[-1]
constant_term = k[0]
numerator = constant_term[0]
denominator = leading_coefficient[1]
p_factors = set(factor(numerator)) + set(1)
q_factors = set(factor(denominator)) + set(1)
p_factors = set(p_factors) + set([-p for p in list(p_factors)])
q_factors = set(q_factors) + set([-q for q in list(q_factors)])
fracs = list(itertools.product(p_factors, q_factors))
for frac in fracs:
terms = []
for i in range(len(k)):
terms.append(multiplication(k, [frac[0] ** i, frac[1] ** i]))
if addition(terms)[0] == 0:
rational_roots.append(frac)
return rational_roots
def factor(number: int):
if number == 0:
return []
factors = []
if number < 0:
factors.append(-1)
number = -number
if number % 2 == 0:
factors.append(2)
while number % 2 == 0:
number //= 2
divisor = 3
while divisor * divisor <= number:
if number % divisor == 0:
factors.append(divisor)
while number % divisor == 0:
number //= divisor
divisor += 2
if number > 1:
factors.append(number)
return factors
def addition(*r: list[int, int]):
numerator = 0
denominator = 1
for frac in r:
denominator *= frac[1]
for frac in r:
numerator += frac[0] * (denominator // frac[1])
common_factor = gcd(numerator, denominator)
return [numerator // common_factor,denominator // common_factor]
def multiplication(*r: list[int, int]):
numerator = 1
denominator = 1
for frac in r:
numerator *= frac[0]
denominator *= frac[1]
common_factor = gcd(numerator, denominator)
return [numerator // common_factor, denominator // common_factor]
def division(r_0: list[int,int], r_1: list[int, int]):
numerator = r_0[0] * r_1[1]
denominator = r_0[1] * r_1[0]
if denominator == 0:
return None
common_factor = gcd(numerator, denominator)
return [numerator // common_factor, denominator // common_factor]
## 2. 模块功能
该模块包含以下主要功能:
- **`polynomials_with_rational_coefficients`**:计算多项式的有理根。
- **`factor`**:对整数进行因式分解。
- **`addition`**:计算两个或更多有理数的和。
- **`multiplication`**:计算两个或更多有理数的积。
- **`division`**:计算两个有理数的商。
## 3. 函数解析
### 3.1 `polynomials_with_rational_coefficients`
#### 功能概述:
该函数的核心作用是计算多项式的有理根。它接受一个或多个包含有理数的列表,每个列表表示多项式的一个系数项。函数根据有理根定理通过测试所有可能的有理根来找到符合条件的解。
#### 参数:
- `k`: 一个或多个包含整数对的列表。每个列表表示多项式的系数,`k[0]` 为常数项系数,`k[-1]` 为最高次项系数。每个系数应由两个整数表示,分别是分子和分母。
#### 实现步骤:
1. **提取常数项和最高次项系数**:
- `numerator`: 通过 `k[0][0]` 提取常数项的分子。
- `denominator`: 通过 `k[-1][1]` 提取最高次项的分母。
2. **因式分解**:
- 使用 `factor` 函数获取常数项分子 `numerator` 和最高次项分母 `denominator` 的所有因数。
- `p_factors`: 常数项分子的因数集合。
- `q_factors`: 最高次项分母的因数集合。
- `p_factors` 和 `q_factors` 分别包括正负因数。
3. **生成有理数候选根**:
- 使用 `itertools.product` 来生成所有可能的有理根(即分子因数和分母因数的所有组合)。
4. **检验每个候选根是否为多项式的根**:
- 对每个候选有理根 `frac`,通过将其代入多项式并检查多项式值是否为零,来验证该根是否满足条件。
- 如果满足条件,则将其加入 `rational_roots` 列表。
5. **返回结果**:
- 返回所有符合条件的有理根。
#### 示例:
```python
polynomials_with_rational_coefficients([2, 1], [3, 1], [4, 1])
# 该函数将返回一个包含多项式 [2/1, 3/1, 4/1] 有理根的列表
```
### 3.2 `factor`
#### 功能概述:
该函数用于对整数进行因式分解,返回一个包含整数因数的列表。
#### 参数:
- `number`: 需要因式分解的整数。
#### 实现步骤:
1. 如果数字为零,直接返回空列表。
2. 如果数字为负数,先将 -1 添加到因数列表中。
3. 对数字进行因式分解,首先处理 2 的倍数,然后用从 3 开始的奇数进行试除,直到数字小于其平方根。
4. 如果分解后的数字大于 1,说明该数字是质数,添加到因数列表。
#### 示例:
```python
factor(12) # 返回 [2, 2, 3]
factor(-12) # 返回 [-1, 2, 2, 3]
```
### 3.3 `addition`
#### 功能概述:
该函数用于计算多个有理数的和。每个有理数以分子和分母的形式表示。
#### 参数:
- `*r`: 一个或多个包含两个整数的列表,每个列表表示一个有理数。
#### 实现步骤:
1. 首先计算所有有理数的共同分母。
2. 计算所有有理数的分子之和。
3. 返回简化后的分子和分母。
#### 示例:
```python
addition([1, 2], [1, 3]) # 返回 [5, 6]
```
### 3.4 `multiplication`
#### 功能概述:
该函数用于计算多个有理数的积。
#### 参数:
- `*r`: 一个或多个包含两个整数的列表,每个列表表示一个有理数。
#### 实现步骤:
1. 计算所有有理数的分子和分母的乘积。
2. 返回简化后的分子和分母。
#### 示例:
```python
multiplication([1, 2], [1, 3]) # 返回 [1, 6]
```
### 3.5 `division`
#### 功能概述:
该函数用于计算两个有理数的商。
#### 参数:
- `r_0`: 第一个有理数,表示为 `[numerator, denominator]`。
- `r_1`: 第二个有理数,表示为 `[numerator, denominator]`。
#### 实现步骤:
1. 计算商的分子和分母。
2. 检查分母是否为零。
3. 返回简化后的商。
#### 示例:
```python
division([1, 2], [1, 3]) # 返回 [3, 2]
```
## 4. 使用示例
假设我们需要找到以下多项式的有理根:
\[ 2x^2 + 3x + 4 = 0 \]
我们可以通过以下代码实现:
```python
# 定义多项式的系数
polynomials_with_rational_coefficients([4, 1], [3, 1], [2, 1])
```
该函数将返回所有可能的有理根,若无有理根,则返回空列表。
|
评分
-
查看全部评分
|