当前位置:K88软件开发文章中心编程全书编程全书02 → 文章内容

R语言中求解线性方程组的方法

减小字体 增大字体 作者:佚名  来源:翔宇亭IT乐园  发布时间:2019-1-3 3:02:23

:2018-10-15 21:41:54

在本站上一篇文章中探讨了在R中求解一元方程的方法,本文将进一步探讨R中求解线性方程组的方法。

设有n个未知数的m个方程的线性方程组:

可以抽象成下列的形式:

Am×nXn×1 = bm×1

对于该方程组

有唯一解的充分必要条件是R(A) = R(A, b) = n;

有无限多解的充分必要条件是 R(A) = R(A, b) < n;

无解的充分必要条件是 R(A) < R(A, b)

即:其有解的充分必要条件是R(A) = R(A, b)

当n=m时,方程为恰定方程组,则X = A-1b;

当n<m时,方程组为超定方程组,则X = (ATA)-1ATb

当n>m时,方程数少于未知量个数,为欠定方程组,有无穷多个解。

1、直接使用矩阵相关知识来求解

(1)恰定方程组

如求下面的方程组:

在R中的求解过程如下:

从图中可以看出该方程组的解为:x1=2,x2=3。

(2)超定方程组

如求下面方程组的解:

编写R程序如下:

A<-matrix(c(1,2,2,3,3,4),nr=3,nc=2,byrow=T)
b<-matrix(c(1,2,3),nr=3,nc=1)
x<-solve(t(A)%*%A)%*%(t(A)%*%b)
x

运行结果如下图所示:

如上图所示可知:该方程的解是x1=1,x2=0

 (3)欠定方程组求解

对于欠定方程组,即方程个数少于变量个数的方程组,可以使用SVD法求解。关于SVD的介绍,大家可以参照这个网址中的介绍:

https://blog.csdn.net/youngpan1101/article/details/54574130

如求解

可以编写代码如下:

A<-matrix(c(1,2,3,2,3,4),nr=2,nc=3,byrow=T)
b<-matrix(c(1,2),nr=2,nc=1)

#对A进行SVD分解
sol.svd <- svd(A)
#获取U D V各个值
U<-sol.svd$u
D<-sol.svd$d
V<-sol.svd$v
C<-t(U)%*%b
Y<-C/D
X<-V%*%Y
X

求得的结果如下图所示:

上图求得的一个解是:x1=0.83,x2=0.33,x3=-0.17

对于R(A) = R(A, b) < n的方程组都可以使用这个方法进行求解。

再如下面的例子:

求解过程如下图所示:

2、使用solve函数来求解

对于R(A) = R(A,b) = n的方程组,可以使用R中提供的solve函数直接求解。

求解代码如下:

A<-matrix(c(2,-1,3,4,-1,1,1,3,-13),3,3,T)
b<-matrix(c(3,3,-6),3,1)
solve(A,b)

运行结果如下:


内容如有问题,请留言。本站将在今后给出一个通用的函数来解决相关问题。敬请关注。

本文为本站原创,如需转载请保留此部分内容及链接:翔宇亭IT乐园(www.k88.net)-R语言中求解线性方程组的方法


R语言中求解线性方程组的方法