求解广义线性系统

这是关于方程比变量少的线性系统;A*x=b在哪里M-借-N矩阵A.行数少于列数,因此m.我一直称这种系统为宽的脂肪,但这是不礼貌的。所以我查阅了《韦氏词典》,发现宽敞的.

这也是我第一篇使用Live Editor的帖子™. 这是一个链接.mlx文件

目录

宽泛线性系统

行数少于列数的宽泛线性系统没有唯一的解。如果您不太清楚要计算的是什么,则很难计算。您可以通过添加一个附加条件来确定该解:最小化其欧几里德或$\ell金宝搏官方网站u 2$范数。这是摩尔-彭罗斯解。它是唯一的,并且具有许多其他特性呃理想的性能。

但近年来,在许多情况下,需要一个不同的条件:最小化解的非零分量的数量。这种解决方案称为稀疏的。实际上,最小化非零组件的数量在组合上是困难的。(这是NP难的。)但是,MATLAB反斜杠运算符生成的解决方案最多为M非零分量。这通常是最小值。

举出例子

选择尺寸。

m=3 n=10
m=3 n=10
断言(m短的

生成一个包含随机一位正整数和负整数项的m-x-n矩阵。每次执行此脚本时,都会出现不同的A.是创建的。

A=randi(18,m,n)-9
A=027-824-630023-76739-3-1413-8-2-7-615

生成具有相同行数的随机右侧。

b=randi(18,m,1)-9
b=506

保存rhs的副本。

b_copy=b;

反斜杠

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

x=A\b
x=0.0-0.51950.2812-0.19530

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

x是如何计算的?使用列旋转计算QR分解。即A*P=Q*R,具有正交Q、右梯形R和置换P。

[Q,R,P]=qr(A)
0.6247-0.6247-0.0 0 0 0.6247-0.0 0 0.7 7 7-0.7 7 7 7 0.7 7 7 7 0.7 7 7 0.7 9 9 9 0.749 0 0.7 7 7 0.7 7 7 7 7 7 7 7 7 7.7 7 7 7 7 7 7 7 7 7.7 7 7 0 0 0 0.7 7 7 0 0 0 0 0 0 0.7 7 7 7 7 7 7 7 7 0 0 0 0 0 0 0 0 0 0.7 7 7 7 7 7 7 7 7 7 7 7 7 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 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 1 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 0 0 1

只保留R的前m列。

R=R(:,1:m)
R=12.8062 1.7179 3.5920 0-9.3834 4.3876 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

撤消排列。

x=P*x
x=0.0-0.51950.2812-0.19530

广义逆矩阵

恢复rhs。

b=b_拷贝;

为了进行比较,可以使用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

SVD

要计算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 0 0 0 15.1459 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8.3091 0 0 0 0 0 0 0 0 0 0 0 0 0列8至第10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2761 0.5246 0.0340 0.0342 0 0 0.0342 00.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.0645-0.0210第8列至第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.21520.1524 0.1853-0.1585 0.0614 0.6475 0.0133 0.0785 0.0450-0.6800.870.1951

然后,用适当的括号,用一个包含对角矩阵的反斜杠,找到最小范数解就是一条线性。

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.关于任何规范,可由

条件(A)=最大值(范数(A*x)/范数(x))/min(范数(A*x)/范数(x))

我们知道,对于2-范数,这是奇异值的比率。那么1-范数或inf-范数呢?我们如何计算呢?

3.

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

4.

这是什么分布?

kmax=10000;kappa=零(kmax,1);对于k=1:kmaxa=randi(18,m,n)-9;kappa(k)=cond(A);终止直方图(kappa)标题("条件(A)")ax=轴;文本(0.7*ax(2),0.8*ax(4),sprintf('m=%2d,n=%2d',m,n)




与MATLAB®R2021a一起发布

|

评论

要发表评论,请点击此处登录到您的 数学作品帐户或创建一个新帐户。