无法将表达式转换为float?

2024-04-25 13:16:43 发布

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

我试图用python来求解这9个非线性方程组,但结果是错误的。我已将代码发布如下: 代码已将P1 P2 P3 A1 A2 A3解析为存储的[x,y,z]坐标号。我试着用这些位置找出最后三个点(x1,y1,z1),(x2,y2,z2),(x3,y3,z3)。在

# For symbolic calculations use sympy
import sympy
import scipy
from scipy.optimize import fsolve
import math
import numpy as np
from numpy import cos,sin

###Set up B1 point 
x1, y1, z1 = sympy.symbols('x1 y1 z1')

###Set up B2 point 
x2, y2, z2 = sympy.symbols('x2 y2 z2')

### Set up B3 point 
x3, y3, z3 = sympy.symbols('x3 y3 z3')

# Each lower arm has length Lc, this is length for A B  
Lc = 3.0 

#Define second points into seperate variables 
a11 = A1[0]
a12 = A1[1]
a13 = A1[2]
a21 = A2[0]
a22 = A2[1]
a23 = A2[2]
a31 = A3[0]
a32 = A3[1]
a33 = A3[2]

##Constrain for Bar AB
eq1 = (x1 - A1[0])**2 + (y1 - A1[1])**2 + (z1 - A1[2])**2 - Lc**2 
eq2 = (x2 - A2[0])**2 + (y2 - A2[1])**2 + (z2 - A2[2])**2 - Lc**2 
eq3 = (x3 - A3[0])**2 + (y3 - A3[1])**2 + (z3 - A2[2])**2 - Lc**2 




### Length for plate B points
Ld = 0.2

##Constrain for plate B points
eq4 = (x2 - x1)**2 + (y2 - y1)**2 + (z2 - z1)**2 - Ld**2 
eq5 = (x3 - x1)**2 + (y3 - y1)**2 + (z3 - z1)**2 - Ld**2 
eq6 = (x3 - x2)**2 + (y3 - y2)**2 + (z3 - z2)**2 - Ld**2 

###Vectors for points P and points A

Upa1 = [A1[0] - P1[0], A1[1] - P1[1], A1[2] - P1[2] ]
Upa2 = [A2[0] - P2[0], A2[1] - P2[1], A2[2] - P2[2] ]
Upa3 = [A3[0] - P3[0], A3[1] - P3[1], A3[2] - P3[2] ]

###Vectors for points A and B
Uab1 = [x1 - A1[0], y1 - A1[1], z1 - A1[2]]
Uab2 = [x2 - A2[0], y2 - A2[1], z2 - A2[2]]
Uab3 = [x3 - A3[0], y3 - A3[1], z3 - A3[2]]
eq7 = np.dot(np.cross(Upa1, Uab1),u1)
eq8 = np.dot(np.cross(Upa2, Uab2),u2)
eq9 = np.dot(np.cross(Upa3, Uab3),u3)

###Using Scipy to solve equations 
def equations(z):
  x1 = z[0]
  y1 = z[1]
  z1 = z[2]
  x2 = z[3]
  y2 = z[4]
  z2 = z[5]
  x3 = z[6]
  y3 = z[7]
  z3 = z[8]

  F = empty((9))
  F[0] = (x1 - A1[0])**2 + (y1 - A1[1])**2 + (z1 - A1[2])**2 - Lc**2
  F[1] = (x2 - A2[0])**2 + (y2 - A2[1])**2 + (z2 - A2[2])**2 - Lc**2 
  F[2] = (x3 - A3[0])**2 + (y3 - A3[1])**2 + (z3 - A2[2])**2 - Lc**2 
  F[3] = (x2 - x1)**2 + (y2 - y1)**2 + (z2 - z1)**2 - Ld**2 
  F[4] = (x3 - x1)**2 + (y3 - y1)**2 + (z3 - z1)**2 - Ld**2 
  F[5] = (x3 - x2)**2 + (y3 - y2)**2 + (z3 - z2)**2 - Ld**2 
  F[6] = np.dot(np.cross(Upa1, Uab1),u1)
  F[7] = np.dot(np.cross(Upa2, Uab2),u2)
  F[8] = np.dot(np.cross(Upa3, Uab3),u3)
  return F    

zGuess = [1., 1., 1., 1., 1., 1., 1., 1., 1.]
z = fsolve(equations, zGuess)

输出如下:

^{pr2}$

Tags: a2a1npa3lcx1x2ld

热门问题