利用R、Octave、NumPy和SciPy求解线性方程组

一、线性方程组

线性方程组是最简单也是最重要的一类代数方程组。大量的科学技术问题,最终往往归结为解线性方程组,因此线性方程组的数值解法在计算数学中占有重要地位 。

二、求解线性方程组

{ x + 2 y + 3 z = 14 ( 1 ) 2 x − 4 y + z = − 3 ( 2 ) 3 x + 5 y − 2 z = 7 ( 3 ) \begin{cases} x + 2y + 3z = 14 &(1)\\ 2x -4y +z = -3 &(2)\\ 3x + 5y - 2z = 7 &(3) \end{cases} x+2y+3z=142x4y+z=33x+5y2z=7(1)(2)(3)

(一)利用行列式计算

D = ∣ 1 2 3 2 − 4 1 3 5 − 2 ∣ = 83 D=\left| \begin{matrix} 1 & 2 & 3\\ 2 & -4 & 1 \\ 3 & 5 & -2 \\ \end{matrix} \right|=83 D=123245312=83

D 1 = ∣ 14 2 3 − 3 − 4 1 7 5 − 2 ∣ = 83 D_1=\left| \begin{matrix} 14 & 2 & 3\\ -3 & -4 & 1 \\ 7 & 5 & -2 \\ \end{matrix} \right|=83 D1=1437245312=83

D 2 = ∣ 1 14 3 2 − 3 1 3 7 − 2 ∣ = 166 D_2=\left| \begin{matrix} 1 & 14 & 3\\ 2 & -3 & 1 \\ 3 & 7 & -2 \\ \end{matrix} \right|=166 D2=1231437312=166

D 3 = ∣ 1 2 14 2 − 4 − 3 3 5 7 ∣ = 249 D_3=\left| \begin{matrix} 1 & 2 & 14\\ 2 & -4 & -3 \\ 3 & 5 & 7 \\ \end{matrix} \right|=249 D3=1232451437=249

据克莱姆法则得:
x = D 1 D = 83 83 = 1 x=\displaystyle \frac{D_1}{D}=\frac{83}{83}=1 x=DD1=8383=1
y = D 2 D = 166 83 = 2 y=\displaystyle \frac{D_2}{D}=\frac{166}{83}=2 y=DD2=83166=2
z = D 3 D = 249 83 = 3 z=\displaystyle \frac{D_3}{D}=\frac{249}{83}=3 z=DD3=83249=3
{ x = 1 y = 2 z = 3 \begin{cases} x=1\\ y=2\\ z=3 \end{cases} x=1y=2z=3

1、采用R计算

在这里插入图片描述

> D = det(matrix(c(1,2,3,2,-4,1,3,5,-2),3,3))
> D1 = det(matrix(c(14,2,3,-3,-4,1,7,5,-2),3,3))
> D2 = det(matrix(c(1,14,3,2,-3,1,3,7,-2),3,3))
> D3 = det(matrix(c(1,2,14,2,-4,-3,3,5,7),3,3))
> x = D1/D; y = D2/D; z = D3/D
> x; y; z
[1] 1
[1] 2
[1] 3

2、利用Octave计算

在这里插入图片描述

octave:2> D = det([1,2,3; 2,-4,1; 3,5,-2])
D = 83
octave:3> D1 = det([14,2,3; -3,-4,1; 7,5,-2])
D1 = 83
octave:4> D2 = det([1,14,3; 2,-3,1; 3,7,-2])
D2 = 166.00
octave:5> D3 = det([1,2,14; 2,-4,-3; 3,5,7])
D3 = 249
octave:6> x = D1/D
x = 1
octave:7> y = D2/D
y = 2.0000
octave:8> z = D3/D
z = 3

3、利用NumPy计算

在这里插入图片描述

# -*- coding: utf-8 -*-
"""
Created on Wed Oct 21 22:15:00 2020

@author: howard

利用NumPy求解三元一次方程组01
"""

import numpy as np

D = np.linalg.det(np.matrix('1,2,3;2,-4,1;3,5,-2'))
D1 = np.linalg.det(np.matrix('14,2,3;-3,-4,1;7,5,-2'))
D2 = np.linalg.det(np.matrix('1,14,3;2,-3,1;3,7,-2'))
D3 = np.linalg.det(np.matrix('1,2,14;2,-4,-3;3,5,7'))

x = D1 / D
y = D2 / D
z = D3 / D

print('x = %.2f\ny = %.2f\nz = %.2f' %(x, y, z))

4、利用SciPy计算

在这里插入图片描述

# -*- coding: utf-8 -*-
"""
Created on Wed Oct 21 22:45:27 2020

@author: howard

利用SciPy求解三元一次方程组01
"""

import scipy as sp
from scipy import linalg

D = linalg.det(sp.mat('1,2,3;2,-4,1;3,5,-2'))
D1 = linalg.det(sp.mat('14,2,3;-3,-4,1;7,5,-2'))
D2 = linalg.det(sp.mat('1,14,3;2,-3,1;3,7,-2'))
D3 = linalg.det(sp.mat('1,2,14;2,-4,-3;3,5,7'))

x = D1 / D
y = D2 / D
z = D3 / D

print('x = %.2f\ny = %.2f\nz = %.2f' %(x, y, z))

(二)利用矩阵计算

[ 1 2 3 2 − 4 1 3 5 − 2 ] [ x y z ] = [ 14 − 3 7 ] \left[ \begin{matrix} 1 & 2 & 3 \\ 2 & -4 & 1\\ 3 & 5 & -2 \\ \end{matrix} \right] \left[ \begin{matrix} x \\ y\\ z \\ \end{matrix} \right] =\left[ \begin{matrix} 14 \\ -3\\ 7 \\ \end{matrix} \right] 123245312xyz=1437

A = [ 1 2 3 2 − 4 1 3 5 − 2 ] , X = [ x y z ] , B = [ 14 − 3 7 ] A=\left[ \begin{matrix} 1 & 2 & 3 \\ 2 & -4 & 1\\ 3 & 5 & -2 \\ \end{matrix} \right] ,X=\left[ \begin{matrix} x \\ y\\ z \\ \end{matrix} \right] ,B=\left[ \begin{matrix} 14 \\ -3\\ 7 \\ \end{matrix} \right] A=123245312,X=xyz,B=1437

A X = B ⟹ X = A − 1 B = [ 0.03614458 0.22891566 0.1686747 0.08433735 − 0.13253012 0.06024096 0.26506024 0.01204819 − 0.09638554 ] [ 14 − 3 7 ] = [ 1 2 3 ] AX=B\Longrightarrow X=A^{-1}B =\left[ \begin{matrix} 0.03614458 & 0.22891566 & 0.1686747 \\ 0.08433735 & -0.13253012 & 0.06024096\\ 0.26506024 & 0.01204819 & -0.09638554 \\ \end{matrix} \right] \left[ \begin{matrix} 14 \\ -3\\ 7 \\ \end{matrix} \right] =\left[ \begin{matrix} 1\\ 2\\ 3 \\ \end{matrix} \right] AX=BX=A1B=0.036144580.084337350.265060240.228915660.132530120.012048190.16867470.060240960.096385541437=123

1、利用R计算

在这里插入图片描述

> A = matrix(c(1,2,3,2,-4,5,3,1,-2),3,3)
> B = matrix(c(14,-3,7),3,1)
> X = solve(A)%*% B; X
     [,1]
[1,]    1
[2,]    2
[3,]    3
> X = solve(A, B); X
     [,1]
[1,]    1
[2,]    2
[3,]    3

2、利用Octave计算

在这里插入图片描述

octave:2> A = [1,2,3; 2,-4,1; 3,5,-2]
A =

   1   2   3
   2  -4   1
   3   5  -2

octave:3> B = [14; -3; 7]
B =

   14
   -3
    7

octave:4> X = A\B
X =

   1.0000
   2.0000
   3.0000

octave:5> X = A^(-1)*B
X =

   1.0000
   2.0000
   3.0000

octave:6> X = mldivide(A,B)
X =

   1.0000
   2.0000
   3.0000

octave:7> X = inv(A)*B
X =

   1.0000
   2.0000
   3.0000

3、利用NumPy计算

在这里插入图片描述

# -*- coding: utf-8 -*-
"""
Created on Wed Oct 21 22:15:00 2020

@author: howard

利用NumPy求解三元一次方程组02
"""

import numpy as np

A = np.matrix('1,2,3;2,-4,1;3,5,-2')
B = np.matrix('14;-3;7')
X = np.linalg.solve(A, B)

print('x = %.2f\ny = %.2f\nz = %.2f' %(X[0], X[1], X[2]))

4、利用SciPy计算

在这里插入图片描述

# -*- coding: utf-8 -*-
"""
Created on Wed Oct 21 22:45:27 2020

@author: howard

利用SciPy求解三元一次方程组02
"""

import scipy as sp
from scipy import linalg

A = sp.mat('1,2,3;2,-4,1;3,5,-2')
B = sp.mat('14;-3;7')
X = linalg.solve(A, B)

print('x = %.2f\ny = %.2f\nz = %.2f' %(X[0], X[1], X[2]))

三、求逆矩阵

A = [ 1 2 3 2 − 4 1 3 5 − 2 ] A=\left[ \begin{matrix} 1 & 2 & 3 \\ 2 & -4 & 1\\ 3 & 5 & -2 \\ \end{matrix} \right] A=123245312

1、用NumPy计算逆矩阵

在这里插入图片描述

2、用SciPy计算逆矩阵

在这里插入图片描述

3、用R计算逆矩阵

在这里插入图片描述

4、用Octave计算逆矩阵

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/howard2005/article/details/109209524