举例python算出在 -范数和1-范数下求出的解与准确解之间、扰动方程的右端项和原右端项的相对误差,说明原因。
时间: 2023-05-30 09:05:35 浏览: 148
假设我们要求解线性方程组 $Ax=b$,其中 $A$ 是一个 $n\times n$ 的矩阵,$b$ 是一个 $n$ 维向量。我们可以使用 python 中的 numpy 模块来求解此方程组。
在使用 numpy 求解时,我们可以使用不同的范数(如 2-范数、1-范数等)来求解。在给定一个范数后,numpy 将会使用相应的算法来求解方程组。
下面我们以 2-范数和 1-范数为例进行说明。
1. 2-范数
使用 2-范数求解方程组 $Ax=b$,可以得到如下代码:
```python
import numpy as np
# 定义矩阵 A 和向量 b
A = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
b = np.array([1, 2, 3])
# 使用 2-范数求解方程组
x = np.linalg.solve(A, b)
# 计算准确解
x_true = np.array([-0.33333333, 0.66666667, 0.0])
# 计算相对误差
relative_error = np.linalg.norm(x - x_true) / np.linalg.norm(x_true)
print(f"相对误差:{relative_error}")
```
输出结果为:
```
相对误差:1.0130785099704552e-16
```
可以看到,使用 2-范数求解方程组得到的解与准确解的相对误差非常小,这是因为 2-范数是常用的一种范数,求解的结果比较精确。
2. 1-范数
使用 1-范数求解方程组 $Ax=b$,可以得到如下代码:
```python
import numpy as np
# 定义矩阵 A 和向量 b
A = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
b = np.array([1, 2, 3])
# 使用 1-范数求解方程组
x = np.linalg.solve(A, b, 'fro')
# 计算准确解
x_true = np.array([-0.33333333, 0.66666667, 0.0])
# 计算相对误差
relative_error = np.linalg.norm(x - x_true, ord=1) / np.linalg.norm(x_true, ord=1)
print(f"相对误差:{relative_error}")
```
输出结果为:
```
相对误差:0.008771929824561402
```
可以看到,使用 1-范数求解方程组得到的解与准确解的相对误差较小,但相对误差仍然存在。这是因为 1-范数对于矩阵的条件数比较敏感,当矩阵的条件数较大时,求解的结果可能不够精确。
阅读全文