鱼C论坛

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

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

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

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

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

x
本帖最后由 veilong 于 2019-10-15 23:53 编辑
import math
from sympy import *
def solve_c(θ,α):
    """
    求解曲线系数c
    θ为过渡角度,用弧度
    α为斜线段角度
    """
    c1,c2,c3,c4,c5,c6,c7=symbols('c1:8')
    eq1 = c1*(1/4 - 1/(2 * math.pi))-c4
    eq2 = c1/(4*math.radians(1/4*θ))-c3
    eq3 = c1*math.pi-16*c2*math.radians(1/4*θ)**2
    eq4 = c2*math.radians(1/2*θ)**2+c3*math.radians(1/2*θ)+c4+c6/(2 * math.pi)-c7
    eq5 = 2*c2*math.radians(1/2*θ)+c3-c5/(4*math.radians(1/4*θ))
    eq6 = 16*c2*math.radians(1/4*θ)**2-c6*math.pi
    eq7 = 5.298-c5/4-c7
    sol = solve((eq1,eq2,eq3,eq4,eq5,eq6,eq7),(c1,c2,c3,c4,c5,c6,c7))
    return sol
c = solve_c(19,85)
#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 编辑
import math
from sympy import *
def solve_c(θ,α):
    """
    求解曲线系数c
    θ为过渡角度,用弧度
    α为斜线段角度
    """
    c1,c2,c3,c4,c5,c6,c7=symbols('c1:8')
    eq1 = c1*(1/4 - 1/(2 * math.pi))-c4
    eq2 = c1/(4*math.radians(1/4*θ))-c3
    eq3 = c1*math.pi-16*c2*math.radians(1/4*θ)**2
    eq4 = c2*math.radians(1/2*θ)**2+c3*math.radians(1/2*θ)+c4+c6/(2 * math.pi)-c7
    eq5 = 2*c2*math.radians(1/2*θ)+c3-c5/(4*math.radians(1/4*θ))
    eq6 = 16*c2*math.radians(1/4*θ)**2-c6*math.pi
    eq7 = 5.298-c5/4-c7
    sol = solve((eq1,eq2,eq3,eq4,eq5,eq6,eq7),(c1,c2,c3,c4,c5,c6,c7))
    return sol

c = solve_c(19,85)

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

使用道具 举报

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

c = solve_c(19,85)

c1,c2,c3,c4,c5,c6,c7=symbols('c1:8')
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-6-10 15:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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