NameError:名称“cos”未定义,sageMath9.4

问题描述 投票:0回答:3

我正在使用 SageMath9.4 编写一个 Python 模块。基本上,我想将此模块导入到Jupyterlab笔记本(运行SageMath 9.4内核)来进行计算等。

这是它的开始:

class Coxeter_System:
'''This class defines the standard root system associated to an abstract Coxeter group.'''

def __init__(self, coxeter_matrix):
    '''Sets up a Coxeter system and root system. At this stage, limited to up to rank 7. 
    '''
    def set_up_coefficient_space(coxeter_matrix):
        '''Sets up a polynomial ring a Free module over a polynomial ring quotiented by the minimal polynomials of the 
        non-rational cos(pi/m_ij) values. 
        
        This is so roots can be compared using an abstract free module rather than over reals'''
        
        A = coxeter_matrix
        k = len(A.rows())

        # Get the cos(pi/m_ij) which are irrational
        non_rational_angles = [x for x in [cos(pi/x) for x in set(A[i,j] for i in range(0,k) for j in range(0,k))] if x not in QQ]

但是,当我打开另一个 Jupyterlab 会话,导入 Python 模块并尝试创建对象“Coxeter_System”的实例时,我收到以下错误(我尝试从要导入的笔记本中执行

from math import cos
)模块到模块本身,但我仍然遇到相同的错误。

任何帮助将不胜感激!):

NameError                                 Traceback (most recent call last)
<ipython-input-6-6b542b6cb042> in <module>
----> 1 W = c.Coxeter_System(Matrix([[Integer(1),Integer(3),Integer(4)],[Integer(3),Integer(1),Integer(3)],[Integer(4),Integer(3),Integer(1)]]))

~/coxeter_groups.py in __init__(self, coxeter_matrix)
     60             return matrix(R,k,B)
     61 
---> 62         R = set_up_coefficient_space(coxeter_matrix)
     63         A = coxeter_matrix
     64         k = len(A.rows())

~/coxeter_groups.py in set_up_coefficient_space(coxeter_matrix)
     17 
     18             # Get the cos(pi/m_ij) which are irrational
---> 19             non_rational_angles = [x for x in [cos(pi/x) for x in set(A[i,j] for i in range(0,k) for j in range(0,k))] if x not in QQ]
     20 
     21             # sort the irrational values of cos(pi/m_ij) in ascending order

~/coxeter_groups.py in <listcomp>(.0)
     17 
     18             # Get the cos(pi/m_ij) which are irrational
---> 19             non_rational_angles = [x for x in [cos(pi/x) for x in set(A[i,j] for i in range(0,k) for j in range(0,k))] if x not in QQ]
     20 
     21             # sort the irrational values of cos(pi/m_ij) in ascending order

NameError: name 'cos' is not defined
python math trigonometry sage pi
3个回答
3
投票

只需使用

math.cos
而不是在
from math import cos

之后使用 cos

例如

math.cos(pi/x)

import math
math.cos(pi/x)

0
投票

对于大多数 IDE,您必须导入一些最流行的数学包

# Example:

import numpy as np
import math as m
import sagemath as sm

numpymath 在 Google Colab 或最流行的 IDE 中通过简单的

import numpy
使用它不会有任何问题。

什么是 SageMath?

SageMath,以前称为Sage,是一种计算代数系统 (CAS),因其构建在数学和对比软件包(例如 NumPySympy、PARI/GP o Máxima)上而脱颖而出。

在 Jupyter Notebook 中安装 SageMath 包:

对于 sagemath,在 jupyter 中您将需要执行一些额外的步骤。

要安装 sagemath 软件包,我们必须执行 pip:

!pip install sagemath

enter image description here

图像显示了 Jupyter 内的确认

使用 sagemath

# import and add the alias s
import sagemath as s

使用它时我们将 aliass”放在函数前面

s.cos(s.pi/x)

如果 sagemath 并不总是正常工作。

我们知道以下内容:“SageMath 的理念是使用现有的开源库,无论它们存在于何处。因此,它使用了其他项目中的许多库。”

对于这些数学函数,您可以使用 numpy:

import numpy as np
np.cos(np.pi/x)

它不会失败,而且在 Jupyter 中您也不需要额外安装。

我希望我有用。


0
投票

def find_maxima (x): """Halla los Index de los maximos relativos""" idx = [] N = 长度(x) 对于范围 (N) 内的 i: 如果 x[i - 1] < x[i] and x[i + 1] < x[1]: idx.append(i) return idx

从 maxima 导入 find_maxima


ModuleNotFoundError Traceback(最近一次调用最后一次) 在 () 中 ----> 1 from maxima import find_maxima

ModuleNotFoundError:没有名为“maxima”的模块


注意:如果您的导入由于缺少软件包而失败,您可以 使用 !pip 或 !apt 手动安装依赖项。

要查看安装一些常见依赖项的示例,请单击 下面的“打开示例”按钮。

© www.soinside.com 2019 - 2024. All rights reserved.