R语言线性方程组的求法

1.线性方程组的求法

1.1 克莱姆法则

克莱姆法则,适用于求解变量和方程数目相等的线性方程组。
假设有N个未知数N个方程组成的方程组:


那么上述方程组可以写成矩阵的形式:


其中:


那么方程组的解为:


其中:



实例:

A=matrix(c(1,-2,1,1,
           1,-2,1,-1,
           2,4,2,5,
            -3,2,6,3),nrow=4,ncol=4,byrow=T)


B=c(2,-3,4,1)

A
##      [,1] [,2] [,3] [,4]
## [1,]    1   -2    1    1
## [2,]    1   -2    1   -1
## [3,]    2    4    2    5
## [4,]   -3    2    6    3
B
## [1]  2 -3  4  1

那么方程组的解:

X=sapply(c(1:4),
  function(i,A,B){
    D1=A
    D1[,i]=B
  det(D1)/det(A)},
  A=A,B=B)

X
## [1] -1.069444 -0.937500 -1.305556  2.500000

1.2 运用R中的solve函数求解线性方程组的解

X=solve(a=A,b=B)X
## [1] -1.069444 -0.937500 -1.305556  2.500000

1.3 超定方程组求解

超定方程组是指方程的个数大于未知数的个数不相等的方程组,例如:



其中,m>n。

仍然假设上述方程组的矩阵表现形式为:


那么:


其中,表示A的转置。 根据数学知识可以证明:如果,那么可逆。

所以可以这样求解上述超定方程组的解,令:

那么:

那么这个方程组的解与上述的超定方程组的解等价。


实例:

A=matrix(c(1,-2,1,1,
           1,-2,1,-1,
           2,4,2,5,
           -3,2,6,3,
           7,9,3,2),nrow=5,ncol=4,byrow=T)

B=c(2,-3,4,1,5)

A
##      [,1] [,2] [,3] [,4]
## [1,]    1   -2    1    1
## [2,]    1   -2    1   -1
## [3,]    2    4    2    5
## [4,]   -3    2    6    3
## [5,]    7    9    3    2
B
## [1]  2 -3  4  1  5

那么方程的解为:

X=solve(t(A)%*%A,t(A)%*%B)t(X)
##           [,1]      [,2]       [,3]      [,4]
## [1,] 0.2350175 0.2299386 -0.2129566 0.7899491

2. 非线性方程组的求法

非线性方程组可以通过变量的替换,转换为线性方程组求解,例如:


那么可以令:,那么方程就变成关于Y的线性方程组了,就可以先求解关于Y的线性方程组的解Y,那么原方程组的解X=exp(Y)。 那么求解方法就与线性方程组一致。

你可能感兴趣的:(R)