我可以得到解这些方程的字典列表吗?(Python)



这是我正在处理的部分代码:

delta, beta, gamma = symbols('delta beta gamma')
eq1 = Eq(tan((delta+beta)/2),nz*tan(theta/2))
eq2 = Eq(tan((delta-beta)/2),nx/ny)
eq3 = Eq(cos(gamma/2),cos(theta/2)/cos((delta+beta)/2))
result = solve([eq1, eq2, eq3], [delta, beta,gamma])

所有参数都给出了:

theta = -1.2974951599797855
nx = - 0.280639152149670
ny = 0.546816938693111
nz = 0.788817407160244
如果没有等式3,输出如下:
{delta: -1.01319515173894, beta: -0.0648548698337719}

由于gamma有两个值,且eqn为3,因此输出为

[(-1.01319515173894, -0.0648548698337719, 0.760927675576123), 
(-1.01319515173894, -0.0648548698337719, 11.8054429387830)]

关于这个结果我有两个问题:首先,是否有一种方法可以使输出看起来像一个包含两个字典的列表?如:

[{delta: -1.01319515173894, beta: -0.0648548698337719, gamma: 0.760927675576123}, 
{delta:-1.01319515173894, beta: -0.0648548698337719, gamma: 11.8054429387830}]

同样,通过使用solve,我应该只得到主角值吗?我想知道我是否可以让gamma的第二个值是-0.760927675576123,而不是11.8054429387830

非常感谢你的帮助:)

下面是如何将元组列表转换为字典列表的方法。要固定-pi和pi之间的间隔,您可以在输出的每个角度上使用math.remainder(radian, tau)(其中tau为2pi)。

from math import remainder, tau
#Output radians
output = [(-1.01319515173894, -0.0648548698337719, 0.760927675576123), 
(-1.01319515173894, -0.0648548698337719, 11.8054429387830)]
#Fix intervals between -pi and pi
fix_interval = [[remainder(j, tau) for j in i] for i in output]
#Convert to dictionary
dict_output = [{'delta':i,'beta':j,'gamma':k} for i,j,k in fix_interval]
dict_output
[{'delta': -1.01319515173894,
'beta': -0.0648548698337719,
'gamma': 0.760927675576123},
{'delta': -1.01319515173894,
'beta': -0.0648548698337719,
'gamma': -0.7609276755761716}]

当然,你可以一步完成这一切,但是我已经试着把它作为一个单独的步骤,这样你就更容易理解它是如何工作的。

最新更新