用平方根、sin 和 cos 求解方程
Solving equations with square root, sin, and cos
我正在从事一个项目,该项目涉及具有四个不同未知数的方程式以及平方根、sin 和 cos。
例如
sqrt(2)+(3/2)*sqrt(3) = a*cos(b)+ c*cos(d)
-sqrt(2)+(3/2) = a*sin(b)+ c*sin(d)
13 = a**2 + c**2
5 = a + c
可能的答案(使用 GeoGebra 找到):
[[a = 2, b = -45 , c = 3, d = 30 ],
[a = 2, b = 47.45, c = 3, d = -27.55],
[a = 3, b = 30 , c = 2, d = -45 ],
[a = 3, b = -27.55, c = 2, d = 47.45]]
NB: 变量 b 和 d 是以度为单位的角度(不是弧度)
我看到了这个 post、,他们用 NumPy 解决了这个问题,但那是用更简单的方程式:
a + 3b + 2c + 2d = 1
2a + b + c + 2d = 0
3a + b + 2c + d = 1
2a + c + 3d = 0
代码所在位置:
import numpy as np
A = np.array([[1,3,2,2],[2,1,1,2],[3,1,2,1],[2,0,1,3]])
B = np.array([1,0,1,0])
print(np.linalg.solve(A,B))
输出:
[-0.27272727 -0.18181818 1.09090909 -0.18181818]
我尝试使用相同的方法,但我似乎无法将我的方程式转换为该方法可以读取的方式。
您可以使用 sympy 以符号方式求解方程:
from sympy import S, Eq, sqrt, sin, cos, solve
from sympy.abc import a, b, c, d
equations = [Eq(sqrt(2) + (3 / S(2)) * sqrt(3), a * cos(b) + c * cos(d)),
Eq(-sqrt(2) + (3 / S(2)), a * sin(b) + c * sin(d)),
Eq(13, a ** 2 + c ** 2),
Eq(5, a + c)]
sol = solve(equations, [a, b, c, d])
结果:
[(2,
-asin(-3/4 + sqrt(2)/2 + 3*sin(2*atan((-2*sqrt(2) + 3 + 2*sqrt(sqrt(3) + 2))/(sqrt(2) + sqrt(6) + 3*sqrt(3) + 6)))/2),
3,
2*atan((-2*sqrt(2) + 3 + 2*sqrt(sqrt(3) + 2))/(sqrt(2) + sqrt(6) + 3*sqrt(3) + 6))),
(2,
asin(-sqrt(2)/2 + 3*sin(2*atan((-3 + 2*sqrt(2) + 2*sqrt(sqrt(3) + 2))/(sqrt(2) + sqrt(6) + 3*sqrt(3) + 6)))/2 + 3/4),
3,
-2*atan((-3 + 2*sqrt(2) + 2*sqrt(sqrt(3) + 2))/(sqrt(2) + sqrt(6) + 3*sqrt(3) + 6)))]
从这里,evalf()
获得数值解(以弧度为单位):
for sol_i in sol:
print([x.evalf() for x in sol_i])
[2.00000000000000, -0.785398163397448, 3.00000000000000, 0.523598775598299]
[2.00000000000000, 0.828153484576581, 3.00000000000000, -0.480843454419166]
我正在从事一个项目,该项目涉及具有四个不同未知数的方程式以及平方根、sin 和 cos。
例如
sqrt(2)+(3/2)*sqrt(3) = a*cos(b)+ c*cos(d)
-sqrt(2)+(3/2) = a*sin(b)+ c*sin(d)
13 = a**2 + c**2
5 = a + c
可能的答案(使用 GeoGebra 找到):
[[a = 2, b = -45 , c = 3, d = 30 ],
[a = 2, b = 47.45, c = 3, d = -27.55],
[a = 3, b = 30 , c = 2, d = -45 ],
[a = 3, b = -27.55, c = 2, d = 47.45]]
NB: 变量 b 和 d 是以度为单位的角度(不是弧度)
我看到了这个 post、
a + 3b + 2c + 2d = 1
2a + b + c + 2d = 0
3a + b + 2c + d = 1
2a + c + 3d = 0
代码所在位置:
import numpy as np
A = np.array([[1,3,2,2],[2,1,1,2],[3,1,2,1],[2,0,1,3]])
B = np.array([1,0,1,0])
print(np.linalg.solve(A,B))
输出:
[-0.27272727 -0.18181818 1.09090909 -0.18181818]
我尝试使用相同的方法,但我似乎无法将我的方程式转换为该方法可以读取的方式。
您可以使用 sympy 以符号方式求解方程:
from sympy import S, Eq, sqrt, sin, cos, solve
from sympy.abc import a, b, c, d
equations = [Eq(sqrt(2) + (3 / S(2)) * sqrt(3), a * cos(b) + c * cos(d)),
Eq(-sqrt(2) + (3 / S(2)), a * sin(b) + c * sin(d)),
Eq(13, a ** 2 + c ** 2),
Eq(5, a + c)]
sol = solve(equations, [a, b, c, d])
结果:
[(2,
-asin(-3/4 + sqrt(2)/2 + 3*sin(2*atan((-2*sqrt(2) + 3 + 2*sqrt(sqrt(3) + 2))/(sqrt(2) + sqrt(6) + 3*sqrt(3) + 6)))/2),
3,
2*atan((-2*sqrt(2) + 3 + 2*sqrt(sqrt(3) + 2))/(sqrt(2) + sqrt(6) + 3*sqrt(3) + 6))),
(2,
asin(-sqrt(2)/2 + 3*sin(2*atan((-3 + 2*sqrt(2) + 2*sqrt(sqrt(3) + 2))/(sqrt(2) + sqrt(6) + 3*sqrt(3) + 6)))/2 + 3/4),
3,
-2*atan((-3 + 2*sqrt(2) + 2*sqrt(sqrt(3) + 2))/(sqrt(2) + sqrt(6) + 3*sqrt(3) + 6)))]
从这里,evalf()
获得数值解(以弧度为单位):
for sol_i in sol:
print([x.evalf() for x in sol_i])
[2.00000000000000, -0.785398163397448, 3.00000000000000, 0.523598775598299]
[2.00000000000000, 0.828153484576581, 3.00000000000000, -0.480843454419166]