首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >渐近解算错误不可散列的类型:'list‘

渐近解算错误不可散列的类型:'list‘
EN

Stack Overflow用户
提问于 2018-03-31 01:01:11
回答 1查看 406关注 0票数 0

我正在试着解一组有渐近性的方程。

看起来xv1, yv1, zv1 = v解包是正确的。

我看不到错误代码指的是什么列表。

代码语言:javascript
复制
def vectPerpend(v):
    import sympy
    'find vector in x_y plane perpendicular to the given vector'
    xv2, yv2 = sympy.symbols ("xv2,yv2")
    xv1, yv1, zv1 = v

    return sympy.solve ([xv2 ** 2 + yv2 ** 2 == 1,
                         xv1 * xv2 + yv1 * yv2 == 0], [xv2, yv2], dict=True)

print (vectPerpend ([3, 5, 1]))

我得到了这个错误:

代码语言:javascript
复制
  File "C:\Python36\lib\site-packages\sympy\solvers\inequalities.py", line 671, in reduce_inequalities
    symbols = (set(symbols) or gens) & gens
TypeError: unhashable type: 'list'



`**UPDATE**: the problem was that equations were presented as enequalities.
Changing from xv2 ** 2 + yv2 ** 2 == 1 to xv2 ** 2 + yv2 ** 2 - 1
     and from xv1 * xv2 + yv1 * yv2 == 0 to xv1 * xv2 + yv1 * yv2   
fixed the error.`
EN

回答 1

Stack Overflow用户

发布于 2018-03-31 01:21:08

错误出在你写下系统的方式上

代码语言:javascript
复制
[xv2 ** 2 + yv2 ** 2 == 1, xv1 * xv2 + yv1 * yv2 == 0],

这两个表达式都会立即计算为False。所以你要求SymPy来解决这个系统

代码语言:javascript
复制
[False, False] 

这当然不是故意的,并导致奇怪的错误消息。

或者使用Eq(xv2 ** 2 + yv2 ** 2, 1)表示方程,或者(更容易)将=替换为-以创建左右两侧的差异。传递给solve的表达式被理解为等于零。

代码语言:javascript
复制
sympy.solve ([xv2 ** 2 + yv2 ** 2 - 1,
              xv1 * xv2 + yv1 * yv2], [xv2, yv2], dict=True)

返回

代码语言:javascript
复制
[{xv2: -5*sqrt(34)/34, yv2: 3*sqrt(34)/34},
 {xv2: 5*sqrt(34)/34, yv2: -3*sqrt(34)/34}]
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49578365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档