如何将此SageMath代码翻译为在Python中运行?

2024-10-02 22:27:22 发布

您现在位置:Python中文网/ 问答频道 /正文

要使此代码在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))

Tags: 代码inforreturnmydefpisqrt
1条回答
网友
1楼 · 发布于 2024-10-02 22:27:22

第一个错误是

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))

搜索“import_语句”,在那里找到一些答案 详细讨论这个话题

相关问题 更多 >