1

我有一个关于 Sage/Python 的问题,但我确信这是一个非常普遍的 CS 问题。我有一个包含 N 个变量的 N 个非线性方程的大型系统。在将其传递给数值求解器之前,我尝试让 Sage 使用 solve 简化方程。在处理一个简单的示例时,我有以下内容:'eqa' 是要在变量 x0、x1、w0、w1 等中求解的方程列表。以下在命令行中可以正常工作:

 j(x0,x1,w0,w1,y0,y1,z0,z1) = solve(eqa, var('x0 x1 w0 w1 y0 y1 z0 z1'))

(我试图将方程列表定义为“可调用的符号表达式”(Sage),因为我使用的数值优化对这些而不是普通的 def python 函数更有效。)

无论如何,当我将它包含在脚本中并尝试加载它时,我会收到错误消息:

     j(x0,x1,w0,w1,y0,y1,z0,z1) = solve(eqa, var('x0 x1 w0 w1 y0 y1 z0 z1'))
SyntaxError: can't assign to function call

我知道我一定在命令行做错了什么,它只是靠运气。或者在脚本中定义这些可调用的符号表达式时是否需要特别小心?感谢您提供的任何见解。这是有关这些类型“功能”之间区别的链接

http://www.sagemath.org/doc/tutorial/tour_functions.html

4

1 回答 1

3

这种定义函数的方式是 Sage 特有的,并且被标准 Python 语法所禁止。我的猜测是(1)您正在尝试使用 Python 运行您的脚本,或者(2)您正在使用 Sage,但您的文件名以 Sage 结尾,.py因此 Sage 将其解释为 Python 文件。

例如:

~/coding$ cat test.sage 
f(x, y) = 3*x+y
print f(3,4)

~/coding$ sage test.sage 
13
~/coding$ cp test.sage test.py
~/coding$ sage test.py
  File "test.py", line 1
    f(x, y) = 3*x+y
SyntaxError: can't assign to function call
~/coding$ python test.py
  File "test.py", line 1
    f(x, y) = 3*x+y
SyntaxError: can't assign to function call
于 2012-07-12T18:11:01.200 回答