求解广义线性系统

这是关于线性系统方程比变量少;A*x = b在哪里——- - - - - -n矩阵一个行比列少,是这样吗M < n.我一直称这种系统为脂肪,但这是不尊重。所以我查阅了韦氏同义词典,发现宽敞的

这也是我第一次使用Live Editor™。这是一个一个链接.mlx文件。

内容

广义线性系统

行比列少的线性系统没有唯一解。金宝搏官方网站如果你不知道你要计算的是什么,那么计算是很难的。您可以通过添加一个附加条件来确定解决方案:最小化其欧几里得或$\ell_2$范数。这是摩尔-彭罗斯解。它是独一无二的,还有许多其他令人满意的特性。

但是近年来出现了许多需要不同条件的情况:尽量减少解决方案的非零组件的数量。这样的解决方案被称为稀疏的.实际上,最小化非零组件的数量在组合上是困难的。(这是np难的。)然而,MATLAB反斜杠运算符生成的解决方案最多非零组件。这通常是最小值。

生成的例子

选择尺寸。

M = 3 n = 10
M = 3 n = 10
Assert (m < n)格式

生成一个m × n矩阵,其中包含随机的一位数正负整数项。每次执行此脚本时,都会有不同的一个被创建。

A =兰迪(18,m,n) - 9
A = 0 2 7 -8 2 -4 -6 3 0 0 2 3 -7 6 7 3 -3 9 -3 -1 4 1 3 -8 -2 -7 -6 1 -8

生成一个具有相同行数的随机右手边。

B = randi(18,m,1) - 9
B = 5 0 6

保存rhs的副本。

B_copy = b;

反斜杠

使用反斜杠计算A*x = b的许多可能解之一。金宝搏官方网站

x = A\b
X = 0 0 0 -0.5195 0 0 0 0 0.2812 -0.1953 0

这个x是稀疏的;它只有m个非零分量。

x是如何计算的?用列旋转计算QR分解。即A*P = Q*R,正交Q,右梯形R,排列P。

[Q,R,P] = Q (A)
Q = -0.6247 -0.4341 -0.6491 0.4685 -0.8734 0.1331 -0.6247 -0.2209 0.7490 R = 1到7列12.8062 1.7179 3.5920 -1.5617 3.2796 8.2772 6.0908 -9.3834 4.3876 -2.6305 -6.5398 0.6628 6.5502 0 0 -6.3911 3.2621 -1.8641 -2.2469 -0.9986列8到10 -0.4685 -9.5266 -3.5920 -3.7092 2.4121 -0.2313 -0.1498 -3.2289 3.6117 P = 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0000000000 0 0 0 0 0 0 1

只保留R的前m列。

R = R(:,1:m)
R = 12.8062 1.7179 3.5920 0 -9.3834 4.3876 0 0 -6.3911

在右边加Q。

b = Q'*b
B = -6.8716 -3.4960 1.2483

反向替换可以求解方三角方程组R*x = b。

x = R\b
X = -0.5195 0.2812 -0.1953

在x的末尾添加一些零,以匹配从R中删除的列数。

X (m+1:n) = 0
X = -0.5195 0.2812 -0.1953 0 0 0 0 0 0 0 0

撤销排列。

x = P*x
X = 0 0 0 -0.5195 0 0 0 0 0.2812 -0.1953 0

伪逆

恢复rhs。

B = b_copy;

为了进行比较,可以用Moore-Penrose伪逆得到最小2范数解。这通常是完全满的;它的分量都不为零。

y = pinv(A)*b
Y = 0.0644 0.0655 0.1261 -0.2161 0.0475 -0.1481 -0.2034 0.1164 -0.1232 0.0612

x和y都是原方程组的解。金宝搏官方网站

Ax = A*x Ay = A*y
Ax = 5.0000 0.0000 6.0000 Ay = 5.0000 -0.0000 6.0000

然而规范(y, 2)小于范数(x,2)

Normyx = [norm(y) norm(x)]
Normyx = 0.4112 0.6222

圣言会

要在不计算假逆的情况下计算y,使用SVD。

[U,S,V] = svd(A)
U = -0.5601 0.2006 -0.8038 0.3872 0.9211 -0.0399 -0.7324 0.3336 0.5936 S = 1到7列20.2128 0 0 0 0 0 0 0 15.1459 8.3091 0 0 0 0 0 0 0 0 0 0 0列8到10 0 0 0 0 0 0 0 0 0 V = 1到7列-0.1066 0.2097 0.2761 0.5246 0.0327 0.4104 0.4231 -0.0342 0.2310 -0.1365 -0.2150 -0.5533 -0.1705 0.3003 -0.4368 -0.2670 -0.4292 0.4955 -0.0865 0.1040 0.1695 0.6265 0.0828 0.1735 0.5967 -0.1499 -0.2918 -0.1873 0.1511 0.4082 -0.3700 -0.0089 0.7338 -0.0647 0.1593 0.4219 -0.0247 -0.1275-0.1803 -0.1248 0.8221 -0.0885 0.3262 -0.3940 0.1662 -0.1806 0.0969 -0.1350 0.7663 0.0530 0.6091 -0.2620 -0.0174 -0.2910 -0.0377 0.2134 0.2324 -0.3586 -0.5571 0.1057 -0.0492 -0.0517 -0.0236 -0.2003 0.0493 0.3620 -0.0193 0.1110 0.0645 -0.0210 Columns 8 through 10 -0.1425 0.4068 -0.2429 -0.6536 0.0165 0.1666 0.0216 -0.4643 0.2127 -0.0817 -0.1943 0.1656 -0.2858 -0.0944 0.1226 -0.0609 -0.2152 0.1524 0.1853 -0.1585 0.0614 0.6475 0.0133 0.0785 0.0450 0.6800 0.1605 0.0664 0.1951 0.8756

然后,使用适当的括号,并使用涉及对角矩阵的反斜杠,找到最小范数解是一行程序,。

y = V*(S\(U'*b))
Y = 0.0644 0.0655 0.1261 -0.2161 0.0475 -0.1481 -0.2034 0.1164 -0.1232 0.0612

问题

关于宽敞的系统,我有很多不了解的地方。

1.

有一个上界吗规范(x) /规范(y)?

2.

的条件数一个任何规范都可以被定义为

气孔导度(A) = max(规范(A * x) /规范(x)) /分钟(规范(A * x) /规范(x))

我们知道,对于2范数这是奇异值的比值。那1范数和info范数呢?怎么计算呢?

3.

用反斜杠计算出的解的残差和误差可以证明什么?我怀疑残差很小,但是当解不是唯一的时候误差是什么?

4.

这个分布是什么?

Kmax = 10000;Kappa = 0 (kmax,1);A = randi(18,m,n) - 9;kappa(k) = cond(A);结束直方图(κ)标题(的电导率(A)”) ax =轴;文本(0.7 * ax (2), 0.8 * ax (4), sprintf ('m = %2d, n = %2d', m, n))




发布与MATLAB®R2021a

|

评论

如欲留言,请点击在这里登录您的MathWorks帐户或创建一个新帐户。