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

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

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

可以抽象成下列的形式:

Am×n Xn×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

当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)

运行结果如下:

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

你可能感兴趣的:(R语言求解线性方程组的方法)