> For the complete documentation index, see [llms.txt](https://laus-organization.gitbook.io/numerical-analysis-implementations-in-python/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://laus-organization.gitbook.io/numerical-analysis-implementations-in-python/zhi-jie-qiu-jie-xian-xing-fang-cheng-zu/2.-lie-zhu-yuan-gao-si-xiao-qu-fa-gaussian-elimination-with-partial-pivoting.md).

# 2. 列主元高斯消去法（Gaussian Elimination with Partial Pivoting）

下面是使用Python实现列主元高斯消去法（Gaussian Elimination with Partial Pivoting）求解线性方程组的代码。该实现包含前向消去和回代两个步骤，并在每一步选择当前列的绝对值最大的元素作为主元。

```python
import numpy as np

def gaussian_elimination_with_partial_pivoting(A, b):
    """
    Solve the system of linear equations Ax = b using Gaussian Elimination with Partial Pivoting.

    Parameters:
    A : 2D list or numpy array
        Coefficient matrix
    b : 1D list or numpy array
        Right-hand side vector

    Returns:
    x : numpy array
        Solution vector
    """
    n = len(b)
    A = A.astype(float)  # Ensure the matrix is of type float
    b = b.astype(float)  # Ensure the vector is of type float
    
    # Forward elimination with partial pivoting
    for i in range(n):
        # Pivoting: find the row with the largest element in the current column
        max_row_index = np.argmax(np.abs(A[i:n, i])) + i
        if A[max_row_index, i] == 0:
            raise ValueError("Matrix is singular or nearly singular")

        # Swap the current row with the max_row_index row
        A[[i, max_row_index]] = A[[max_row_index, i]]
        b[[i, max_row_index]] = b[[max_row_index, i]]

        # Make the diagonal element 1 and eliminate the column below
        pivot = A[i, i]
        A[i] = A[i] / pivot
        b[i] = b[i] / pivot

        for j in range(i + 1, n):
            factor = A[j, i]
            A[j] = A[j] - factor * A[i]
            b[j] = b[j] - factor * b[i]

    # Backward substitution
    x = np.zeros(n)
    for i in range(n - 1, -1, -1):
        x[i] = b[i] - np.dot(A[i, i + 1:], x[i + 1:])
    
    return x

# Example usage
A = np.array([[2, -1, 1],
              [3, 3, 9],
              [3, 3, 5]], dtype=float)
b = np.array([2, -1, 2], dtype=float)

x = gaussian_elimination_with_partial_pivoting(A, b)
print("Solution:", x)
```

#### 代码说明

1. **输入参数**：
   * `A`：系数矩阵，可以是二维列表或NumPy数组。
   * `b`：右端向量，可以是一维列表或NumPy数组。
2. **前向消去（Forward Elimination with Partial Pivoting）**：
   * 对于每一列，从当前行到最后一行中选择绝对值最大的元素作为主元。
   * 交换当前行和主元所在行。
   * 将当前行的主元归一化。
   * 对当前行以下的每一行进行消去操作，使得该列元素变为零。
3. **回代（Backward Substitution）**：
   * 从最后一行开始，逐步向上回代，求解每一个未知数。

#### 示例

给定系数矩阵 (A) 和右端向量 (b)：

```plaintext
A = [[2, -1, 1],
     [3, 3, 9],
     [3, 3, 5]]
b = [2, -1, 2]
```

运行上述代码，求解线性方程组 (Ax = b)，可以得到解向量 `x`。

#### 注意事项

* 该实现假设矩阵 (A) 是非奇异的，即有唯一解。
* 该实现通过交换行操作避免了数值不稳定的问题，适用于更广泛的情况。


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://laus-organization.gitbook.io/numerical-analysis-implementations-in-python/zhi-jie-qiu-jie-xian-xing-fang-cheng-zu/2.-lie-zhu-yuan-gao-si-xiao-qu-fa-gaussian-elimination-with-partial-pivoting.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
