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

(私が使用する数値最適化は、通常のdef python関数よりもこれらの方がうまく機能するため、方程式のリストを「呼び出し可能なシンボリック式」(Sage)として定義しようとしています。)

いずれにせよ、これをスクリプトに含めてロードしようとすると、次のエラーが発生します。

     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

私はコマンドラインで何か間違ったことをしているに違いないことを知っています。または、スクリプトでこれらの呼び出し可能なS式を定義するときに特別な注意が必要ですか?あなたが提供できる洞察に感謝します。これらのタイプの「関数」の違いに関するリンクは次のとおりです。

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

4

1 に答える 1

3

関数を定義するこの方法はSage固有であり、標準のPython構文では禁止されています。私の推測では、(1)Pythonを使用してスクリプトを実行しようとしている、または(2)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 に答える