线性系统解决方案中的病态

病态线性系统是一种线性系统,它对右侧矩阵上的系数矩阵或矢量的较小摄动做出响应,而系统解却发生了较大变化。 看到这一点,将向要考虑的两个示例提供两种小扰动。 在第一个示例中,将引入系数矩阵一个分量的轻微变化,在第二个示例中,将在右侧的向量上进行摄动。

**示例1,**在本例中,我们考虑线性系统病态矩阵 python 病态矩阵正则化处理_病态矩阵 python,其中

病态矩阵 python 病态矩阵正则化处理_系数矩阵_02

为了在MATLAB中求解此线性系统,我们使用以下命令:

>> A = [5., 1., 1.; 1., 5., 1.; 1., 1., 5.]
A =
5 1 1
1 5 1
1 1 5
>> b = [5.; -3.; 5.]
b =
5
-3
5
>> x = A\b
x =
1.0000
-1.0000
1.0000
In Python:
In [1]: import numpy as np
In [2]: A = np.array([[5., 1., 1.], [1., 5., 1.], [1., 1., 5.]])
In [3]: b = np.array([[5.], [-3.], [5.]])
In [4]: x = np.linalg.solve(A, b)
In [5]: print(’x = \n’, x)
x =
[[ 1.]
[-1.]
[ 1.]]

现在,我们考虑的第一个扰动将在分量病态矩阵 python 病态矩阵正则化处理_线性系统_03上,其中我们将病态矩阵 python 病态矩阵正则化处理_系数矩阵_04设置为病态矩阵 python 病态矩阵正则化处理_病态矩阵 python_05

>> B = A
B =
5 1 1
1 5 1
1 1 5
>> B(1, 1) = B(1, 1) + 0.0001
B =
5.0001 1.0000 1.0000
1.0000 5.0000 1.0000
1.0000 1.0000 5.0000
>> y = B\b
y =
1.0000
-1.0000
1.0000
>> disp(’x - y = ’), disp(num2str(x-y))
x - y =
2.1428e-05
-3.5714e-06
-3.5714e-06
>> disp([’|| x-y||_2 = ’ num2str(norm(x-y, 2))])
|| x-y||_2 = 2.2015e-05

Python代码

正在考虑的第二个扰动将在右侧,其中病态矩阵 python 病态矩阵正则化处理_系数矩阵_06将被病态矩阵 python 病态矩阵正则化处理_系数矩阵_07替换,从而在右侧给出向量病态矩阵 python 病态矩阵正则化处理_python_08。 原始系数矩阵病态矩阵 python 病态矩阵正则化处理_python_09将保持不变,并且将求解线性系统病态矩阵 python 病态矩阵正则化处理_病态矩阵 python_10

MATLAB代码

Python代码

从示例1中可以注意到,系数矩阵或右侧向量的某些分量的较小变化会导致解的较小变化。 因此,给定的线性系统对小扰动不敏感。 对小扰动不敏感的系统称为适定系统。

**示例2,**在本例中,考虑线性系统病态矩阵 python 病态矩阵正则化处理_系数矩阵_11,其中

病态矩阵 python 病态矩阵正则化处理_matlab_12

该示例的目的是显示系数矩阵F或向量病态矩阵 python 病态矩阵正则化处理_线性系统_13的一个条目的微小变化如何导致线性系统病态矩阵 python 病态矩阵正则化处理_系数矩阵_11的解的急剧变化。

MATLAB用于通过以下命令求解线性系统病态矩阵 python 病态矩阵正则化处理_病态矩阵 python_15

>> F = [1001, -999, 999; 1, 1, -1; 1000, -1000, 1000] ;
>> d = [1001; 1; 1000] ;
>> x = F\d
Warning: Matrix is close to singular or badly scaled. Results
may be inaccurate.
RCOND = 1.067985e-16.
x =
1
0.4147
0.4147

警告表明矩阵接近奇异,因此结果可能不准确。 线性系统的MATLAB解决方案与所注意到的精确解决方案病态矩阵 python 病态矩阵正则化处理_系数矩阵_16相去甚远。

在Python中,可以使用Python命令解决上述线性系统:

同样,尽管Python在找到线性系统解上比在MATLAB中具有更高的准确性,但在求解线性系统上的误差仍然不小。

同样,小的扰动将被引入系数矩阵病态矩阵 python 病态矩阵正则化处理_病态矩阵 python_17和向量病态矩阵 python 病态矩阵正则化处理_线性系统_13。 首先,将扰动病态矩阵 python 病态矩阵正则化处理_线性系统_19加到病态矩阵 python 病态矩阵正则化处理_线性系统_20,得到矩阵病态矩阵 python 病态矩阵正则化处理_病态矩阵 python_21。然后,计算线性系统病态矩阵 python 病态矩阵正则化处理_python_22病态矩阵 python 病态矩阵正则化处理_matlab_23的解:

matlab

在Python中,将使用以下命令:

其次,向向量病态矩阵 python 病态矩阵正则化处理_线性系统_13的第三分量添加一个较小的病态矩阵 python 病态矩阵正则化处理_线性系统_19以获得向量病态矩阵 python 病态矩阵正则化处理_系数矩阵_26并求解线性系统病态矩阵 python 病态矩阵正则化处理_线性系统_27。 在MATLAB中,使用以下命令:

matlab

Python代码

Python不会发布一条消息来抱怨矩阵的奇异性,但是确实矩阵接近奇异。

示例2中的结果表明,系数矩阵的较小变化或右侧矢量的变化都将导致线性系统解的较大变化。 对小变化的敏感性表明是病态线性系统。

不适定系统的更多示例

在本节中,将考虑两个最小二乘近似问题。 在第一个问题中,将构建一个范德蒙矩阵以找到最适合表格数据的回归系数。 在第二个示例中,将构建希尔伯特矩阵,以找到特定度数的多项式系数来近似给定函数。

示例3在此示例中,考虑了表2.1中给出的数据。 它由九个人的九个身高和体重数据对组成。 目的是找到回归系数,使得病态矩阵 python 病态矩阵正则化处理_matlab_28是最小二乘解。 在MATLAB中,我们按如下方式计算回归系数:

python

现在,我们在高度矢量的第三个分量上呈现一个小的变化,并观察该变化将如何影响最终的回归系数。

python

条件编号和病态矩阵

将条件编号链接到与矩阵相关的特征值

不适定系统的进一步分析

线性系统解的正则化

截断的SVD方法

Tikhonov正则化

L曲线法

差异原则

详情请参考 - 亚图跨际