gpt4 book ai didi

r - 用R求解非平方线性系统

转载 作者:行者123 更新时间:2023-12-04 06:03:41 25 4
gpt4 key购买 nike

如何用R:A X = B解决一个非平方线性系统?

(在系统没有解决方案或无限多个解决方案的情况下)

例子 :

A=matrix(c(0,1,-2,3,5,-3,1,-2,5,-2,-1,1),3,4,T)
B=matrix(c(-17,28,11),3,1,T)

A
[,1] [,2] [,3] [,4]
[1,] 0 1 -2 3
[2,] 5 -3 1 -2
[3,] 5 -2 -1 1


B
[,1]
[1,] -17
[2,] 28
[3,] 11

最佳答案

如果矩阵A的行多于列,则应使用最小二乘拟合。

如果矩阵A的行少于列,则应执行奇异值分解。每种算法都尽力使用假设为您提供解决方案。

这是显示如何使用SVD作为求解器的链接:

http://www.ecse.rpi.edu/~qji/CV/svd_review.pdf

让我们将其应用于您的问题,看看它是否有效:

您的输入矩阵A和已知的RHS向量B:

> A=matrix(c(0,1,-2,3,5,-3,1,-2,5,-2,-1,1),3,4,T)
> B=matrix(c(-17,28,11),3,1,T)
> A
[,1] [,2] [,3] [,4]
[1,] 0 1 -2 3
[2,] 5 -3 1 -2
[3,] 5 -2 -1 1
> B
[,1]
[1,] -17
[2,] 28
[3,] 11

让我们分解您的 A矩阵:
> asvd = svd(A)
> asvd
$d
[1] 8.007081e+00 4.459446e+00 4.022656e-16

$u
[,1] [,2] [,3]
[1,] -0.1295469 -0.8061540 0.5773503
[2,] 0.7629233 0.2908861 0.5773503
[3,] 0.6333764 -0.5152679 -0.5773503

$v
[,1] [,2] [,3]
[1,] 0.87191556 -0.2515803 -0.1764323
[2,] -0.46022634 -0.1453716 -0.4694190
[3,] 0.04853711 0.5423235 0.6394484
[4,] -0.15999723 -0.7883272 0.5827720

> adiag = diag(1/asvd$d)
> adiag
[,1] [,2] [,3]
[1,] 0.1248895 0.0000000 0.00000e+00
[2,] 0.0000000 0.2242431 0.00000e+00
[3,] 0.0000000 0.0000000 2.48592e+15

这是关键: d中的第三个特征值非常小;相反, adiag中的对角元素很大。在求解之前,将其设置为零:
> adiag[3,3] = 0
> adiag
[,1] [,2] [,3]
[1,] 0.1248895 0.0000000 0
[2,] 0.0000000 0.2242431 0
[3,] 0.0000000 0.0000000 0

现在,我们来计算解决方案(请参见上面我给您的链接中的幻灯片16):
> solution = asvd$v %*% adiag %*% t(asvd$u) %*% B
> solution
[,1]
[1,] 2.411765
[2,] -2.282353
[3,] 2.152941
[4,] -3.470588

现在我们有了一个解决方案,让我们将其替换回去,看看它是否为我们提供了相同的 B:
> check = A %*% solution
> check
[,1]
[1,] -17
[2,] 28
[3,] 11

那是您开始使用的 B方面,所以我认为我们很好。

这是来自AMS的另一个很好的SVD讨论:

http://www.ams.org/samplings/feature-column/fcarc-svd

关于r - 用R求解非平方线性系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19763698/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com