【问题标题】:How can I translate this SageMath code to run in Python?如何翻译此 SageMath 代码以在 Python 中运行?
【发布时间】:2023-03-29 11:00:02
【问题描述】:

我必须做些什么才能让这段代码在 Python 中运行?我从here 获得了代码。如果我在CoCalc 的 SageMath 工作簿中运行它,它无需调整即可工作。导入 sage 和 numpy 后在 Python 中运行时,出现各种名称和属性错误。

def mean_x(factor, values):
    return sum([cos(2*pi*v/factor) for v in values])/len(values)

def mean_y(factor, values):
    return sum([sin(2*pi*v/factor) for v in values])/len(values)

def calculatePeriodAppeal(factor, values):
    mx = mean_x(factor, values)
    my = mean_y(factor, values)
    appeal = sqrt(mx^2+my^2)
    return appeal

def calculateBestLinear(factor, values):
    mx = mean_x(factor, values).n()
    my = mean_y(factor, values).n()
    y0 = factor*atan2(my,mx)/(2*pi).n()
    err = 1-sqrt(mx^2+my^2).n()
    return [factor*x + y0, err]

def calculateGCDAppeal(factor, values):
    mx = mean_x(factor, values)
    my = mean_y(factor, values)
    appeal = 1 - sqrt((mx-1)^2+my^2)/2
    return appeal

testSeq = [0,125,211,287,408,520,650,735,816,942,1060] 
gcd = calculateGCDAppeal(x,testSeq)
agcd = find_local_maximum(gcd,2,100)
print(agcd)
plot(gcd,(x,2,100))

【问题讨论】:

    标签: python translate sage


    【解决方案1】:

    第一个错误是

    RuntimeError: Use ** for exponentiation, not '^', which means xor
    in Python, and has the wrong precedence.
    

    一旦修复,就会有各种缺失的导入。

    使用 Sage 的 import_statements 函数找到它们中的每一个。

    sage: import_statements(x)
    from sage.calculus.predefined import x
    
    sage: import_statements(sum)
    from sage.misc.functional import symbolic_sum
    
    sage: import_statements(cos)
    from sage.functions.trig import cos
    
    sage: import_statements(sin)
    from sage.functions.trig import sin
    

    最终代码可能如下所示:

    from sage.calculus.predefined import x
    from sage.misc.functional import symbolic_sum as sum
    from sage.functions.trig import cos, sin
    
    def mean_x(factor, values):
        return sum(cos(2*pi*v/factor) for v in values) / len(values)
    
    def mean_y(factor, values):
        return sum(sin(2*pi*v/factor) for v in values) / len(values)
    
    def calculatePeriodAppeal(factor, values):
        mx = mean_x(factor, values)
        my = mean_y(factor, values)
        appeal = sqrt(mx**2 + my**2)
        return appeal
    
    def calculateBestLinear(factor, values):
        mx = mean_x(factor, values).n()
        my = mean_y(factor, values).n()
        y0 = factor*atan2(my, mx)/(2*pi).n()
        err = 1-sqrt(mx**2 + my**2).n()
        return [factor*x + y0, err]
    
    def calculateGCDAppeal(factor, values):
        mx = mean_x(factor, values)
        my = mean_y(factor, values)
        appeal = 1 - sqrt((mx - 1)**2 + my**2)/2
        return appeal
    
    testSeq = [0, 125, 211, 287, 408, 520, 650, 735, 816, 942, 1060]
    gcd = calculateGCDAppeal(x, testSeq)
    agcd = find_local_maximum(gcd, 2, 100)
    print(agcd)
    plot(gcd, (x, 2, 100))
    

    在 Ask Sage 中搜索“import_statements”,那里有一些答案 详细了解该主题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-21
      • 2023-04-10
      • 1970-01-01
      • 2020-12-01
      • 2017-07-24
      • 2011-02-08
      • 1970-01-01
      相关资源
      最近更新 更多