用平方根、正弦和余弦解方程

2024-10-01 13:39:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做一个项目,这个项目涉及四个不同的未知数与平方根、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:变量bd是角度(不是弧度)

我看了这篇文章Solving linear equation with four variables,他们用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]

我尝试使用同样的方法,但我似乎无法将我的方程转换成这种方法可以读取的方式


Tags: 项目方法答案npsqrtsincosarray
1条回答
网友
1楼 · 发布于 2024-10-01 13:39:34

您可以使用Symphy以符号方式解方程:

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]

相关问题 更多 >