如何用 Python 解决这个数学难题?
How to solve this math puzzle with Python?
A + B = 8
B + D = 8
A + C = 13
C - D = 6
如何求出A、B、C、D的值?
我假设这些值是整数和正数,然后这样做:
a = range(0,14)
b = c = d = a
for i in a:
for x in b:
for y in c:
for z in d:
if (a[i] + b[x] == 8 and a[i] + c[y] == 13 and b[x] + d[z] == 8 and c[y]-d[z]==6):
print(a[i],b[x],c[y],d[z])
但这不起作用。即使那样,我也会将范围扩展到 a = range(-100,100)
。
在手动求解方程式后(在 Google 的帮助下)我知道涉及浮点数,例如A = 3.5
等
但是Python怎么解决呢。
如果您了解线性代数,则可以将问题构建为一个方程组,然后使用名为 numpy
(帽子提示 @Griboullis)的免费可用且流行的库来解决这个问题是微不足道的:
import numpy as np
A = [[1, 1, 0, 0],
[0, 1, 0, 1],
[1, 0, 1, 0],
[0, 0, 1, -1]]
b = [8, 8, 13, 6]
answer = np.linalg.solve(A, b)
如果您想复习一下此 python 解决方案背后的矩阵 math/linear 代数,可以查看 https://www.mathsisfun.com/algebra/systems-linear-equations-matrices.html。
不需要学习矩阵理论(至少不需要)。
>>> from sympy import *
>>> var('A B C D')
(A, B, C, D)
>>> solve([A+B-8,B+D-8,A+C-13,C-D-6])
{B: 9/2, D: 7/2, C: 19/2, A: 7/2}
你只需要将每个等式如A+B=8表示为A+B-8=0的形式,然后省略'=0'部分即可。
A + B = 8
B + D = 8
A + C = 13
C - D = 6
如何求出A、B、C、D的值?
我假设这些值是整数和正数,然后这样做:
a = range(0,14)
b = c = d = a
for i in a:
for x in b:
for y in c:
for z in d:
if (a[i] + b[x] == 8 and a[i] + c[y] == 13 and b[x] + d[z] == 8 and c[y]-d[z]==6):
print(a[i],b[x],c[y],d[z])
但这不起作用。即使那样,我也会将范围扩展到 a = range(-100,100)
。
在手动求解方程式后(在 Google 的帮助下)我知道涉及浮点数,例如A = 3.5
等
但是Python怎么解决呢。
如果您了解线性代数,则可以将问题构建为一个方程组,然后使用名为 numpy
(帽子提示 @Griboullis)的免费可用且流行的库来解决这个问题是微不足道的:
import numpy as np
A = [[1, 1, 0, 0],
[0, 1, 0, 1],
[1, 0, 1, 0],
[0, 0, 1, -1]]
b = [8, 8, 13, 6]
answer = np.linalg.solve(A, b)
如果您想复习一下此 python 解决方案背后的矩阵 math/linear 代数,可以查看 https://www.mathsisfun.com/algebra/systems-linear-equations-matrices.html。
不需要学习矩阵理论(至少不需要)。
>>> from sympy import *
>>> var('A B C D')
(A, B, C, D)
>>> solve([A+B-8,B+D-8,A+C-13,C-D-6])
{B: 9/2, D: 7/2, C: 19/2, A: 7/2}
你只需要将每个等式如A+B=8表示为A+B-8=0的形式,然后省略'=0'部分即可。