鱼C论坛

 找回密码
 立即注册
查看: 5009|回复: 4

[已解决]请问如何取得sympy solve解出的方程后的返回值?

[复制链接]
发表于 2019-10-15 23:48:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 veilong 于 2019-10-15 23:53 编辑
  1. import math
  2. from sympy import *
  3. def solve_c(θ,α):
  4.     """
  5.     求解曲线系数c
  6.     θ为过渡角度,用弧度
  7.     α为斜线段角度
  8.     """
  9.     c1,c2,c3,c4,c5,c6,c7=symbols('c1:8')
  10.     eq1 = c1*(1/4 - 1/(2 * math.pi))-c4
  11.     eq2 = c1/(4*math.radians(1/4*θ))-c3
  12.     eq3 = c1*math.pi-16*c2*math.radians(1/4*θ)**2
  13.     eq4 = c2*math.radians(1/2*θ)**2+c3*math.radians(1/2*θ)+c4+c6/(2 * math.pi)-c7
  14.     eq5 = 2*c2*math.radians(1/2*θ)+c3-c5/(4*math.radians(1/4*θ))
  15.     eq6 = 16*c2*math.radians(1/4*θ)**2-c6*math.pi
  16.     eq7 = 5.298-c5/4-c7
  17.     sol = solve((eq1,eq2,eq3,eq4,eq5,eq6,eq7),(c1,c2,c3,c4,c5,c6,c7))
  18.     return sol
  19. c = solve_c(19,85)
  20. #c1=c[c1]
复制代码



                               
登录/注册后可看大图


运行后得{c1: 2.06084003807692, c2: 58.8751760609687, c3: 6.21460191754672, c4: 0.187217130537599, c5: 8.53515996192307, c6: 2.06084003807692, c7: 3.16421000951923}
加上c1=c[c1]这句则报错:name 'c1' is not defined
尝试将symbols中的c1换为x,y,z中之一则正确取得值。
请高手不吝解答,谢谢!
最佳答案
2019-10-16 07:43:51
本帖最后由 XiaoPaiShen 于 2019-10-16 09:29 编辑
  1. import math
  2. from sympy import *
  3. def solve_c(θ,α):
  4.     """
  5.     求解曲线系数c
  6.     θ为过渡角度,用弧度
  7.     α为斜线段角度
  8.     """
  9.     c1,c2,c3,c4,c5,c6,c7=symbols('c1:8')
  10.     eq1 = c1*(1/4 - 1/(2 * math.pi))-c4
  11.     eq2 = c1/(4*math.radians(1/4*θ))-c3
  12.     eq3 = c1*math.pi-16*c2*math.radians(1/4*θ)**2
  13.     eq4 = c2*math.radians(1/2*θ)**2+c3*math.radians(1/2*θ)+c4+c6/(2 * math.pi)-c7
  14.     eq5 = 2*c2*math.radians(1/2*θ)+c3-c5/(4*math.radians(1/4*θ))
  15.     eq6 = 16*c2*math.radians(1/4*θ)**2-c6*math.pi
  16.     eq7 = 5.298-c5/4-c7
  17.     sol = solve((eq1,eq2,eq3,eq4,eq5,eq6,eq7),(c1,c2,c3,c4,c5,c6,c7))
  18.     return sol

  19. c = solve_c(19,85)

  20. c1,c2,c3,c4,c5,c6,c7=symbols('c1:8')
  21. print(c[c1])
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-10-16 07:43:51 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
本帖最后由 XiaoPaiShen 于 2019-10-16 09:29 编辑
  1. import math
  2. from sympy import *
  3. def solve_c(θ,α):
  4.     """
  5.     求解曲线系数c
  6.     θ为过渡角度,用弧度
  7.     α为斜线段角度
  8.     """
  9.     c1,c2,c3,c4,c5,c6,c7=symbols('c1:8')
  10.     eq1 = c1*(1/4 - 1/(2 * math.pi))-c4
  11.     eq2 = c1/(4*math.radians(1/4*θ))-c3
  12.     eq3 = c1*math.pi-16*c2*math.radians(1/4*θ)**2
  13.     eq4 = c2*math.radians(1/2*θ)**2+c3*math.radians(1/2*θ)+c4+c6/(2 * math.pi)-c7
  14.     eq5 = 2*c2*math.radians(1/2*θ)+c3-c5/(4*math.radians(1/4*θ))
  15.     eq6 = 16*c2*math.radians(1/4*θ)**2-c6*math.pi
  16.     eq7 = 5.298-c5/4-c7
  17.     sol = solve((eq1,eq2,eq3,eq4,eq5,eq6,eq7),(c1,c2,c3,c4,c5,c6,c7))
  18.     return sol

  19. c = solve_c(19,85)

  20. c1,c2,c3,c4,c5,c6,c7=symbols('c1:8')
  21. print(c[c1])
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-16 22:05:17 | 显示全部楼层
非常感谢!但还有点不明白,为什么符号变量如果为x,y,z可直接取值,而非x,y,z如c1等需再次symbols('c1:8')?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-16 22:45:36 From FishC Mobile | 显示全部楼层
c1 是方法solve_c中的局部变量,出了该方法就无法再访问了,在方法外重新运行symbols方法获得它的值就可以访问结果了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-16 23:07:40 | 显示全部楼层
XiaoPaiShen 发表于 2019-10-16 22:45
c1 是方法solve_c中的局部变量,出了该方法就无法再访问了,在方法外重新运行symbols方法获得它的值就可以 ...

谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-19 11:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表