这是我正在处理的部分代码:
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}]
当然,你可以一步完成这一切,但是我已经试着把它作为一个单独的步骤,这样你就更容易理解它是如何工作的。