1◆◆多元一次方程组

◆◆◆◆

竟然指定是问学霸,被我看到了那可是不

行的,必须强势插入,召唤学渣好帮手---

Python①!

打开Python①命令行,逐行输入(回

车换行):

>

>

>

i

m

p

o

r

t

n

u

m

p

y

a

s

n

p

#numpy②

>>> a = np.array([

[1, 1, 0, 0],

[0, 0, 1,-1],

[1, 0, 1, 0],

[0, 1, 0, 1]

])

>>> b= np.array([8, 6, 13, 8])

>>> result = np.linalg.solve(a, b)

>>> print(result)

[ 3.5  4.5  9.5  3.5]

上面方程组的答案就是[ 3.5  4.5  9.5  3.5],下面来

解释一下这个方程怎么变形为这个代码。

1.1  方程组中有4项未知数,可以看作:

1.2

变形为常见方程方式(明白原理后,在脑子里按顺

序分配未知量即可):

1*x + 1*y + 0*z + 0*w = 8

0*x + 0*y + 1*z - 1*w = 6

1*x + 0*y + 1*z + 0*w= 13

0*x + 1*y + 0*z - 1*w = 8

1.3

因为未知数的位置是严格定义了的,现在直接抄下

倍数,将方程左边变形为矩阵:

[[1, 1, 0, 0],

[0, 0, 1,-1],

[1, 0, 1, 0],

[0, 1, 0, 1]]

1.4  方程右边变形为数列(可理解为一维矩阵):

[8, 6, 13, 8]

1.5

最后,完成numpy②线性代数模块求解(Linear

algebra):

>>> result = np.linalg.solve(a, b)

>>> print(result)    #打印结果

[ 3.5  4.5  9.5  3.5]    #这4个数依次对应xyzw这4个

未知数

1分半搞定,学霸已放弃求解,献上他的大拇哥 : )。

2◆◆多元多次方程组

不过,学霸就是学霸,其他人都在惊叹我的神速,学霸已

经发问,你解多元多次方程组速度如何?

吓死宝宝了,还好以前做过不少功课,30秒复习一下思路

赶紧接招:咱们一人出一个方程,合起来解吧,我的是x**3

+

y = 4。学霸不假思索对曰:x**2 + y**2 = 16。果然学霸是纸

算,自然不愿意上高次。

这回,得动用解多次方程的神器了---scipy③。有了上面

一次方程组的积累,下面应该能轻松看懂。

2.1  方程组变形,让右侧为0:

x**3 + y - 4 = 0

x**2 + y**2 - 16 = 0

2.2  在python①命令行中输入:

>>> from scipy.optimize import fsolve    #scipy③

>>> def func(x):

x1,x2=x[0],x[1]    #注意前面有4个空格

return [x1**3 + x2 -4, x1**2 + x2**2 - 16]    #注意

前面有4个空格

>>> result = fsolve(func, [1,1])    # 初始化计算使

用x=1,y=1

>>> print(result)

[ 0.12503055  3.99804544]    #这就是方程组的解了

从头到尾不到2分钟。群里顿时炸锅了,全班见证了学渣

秒杀学霸的奇迹:)。

有人说“数学是思维的科学”,现实是大部分人只能在数

学计算上不被学霸秒杀,才能和他们谈数学思维。请善用数学

工具,完成你的逆袭!

3◆◆相关工具链接与安装:

① python的下载与安装