0

昨日、オープンソースのコンピューター代数システムである Sage をいじり始めました。Sage は Python を使用して、複数のオープンソース パッケージを 1 つのコーディング インターフェイスにバインドします。

残念ながら、Sage だけでなく、Python も同様に新しいものでした。私は今日の大部分を両方の学習に費やしました。何と言えばいい?かつてのオタク、ずっとオタク...

問題が発生したのは、多次元でベクトル システムを調べ始めたときです。

以下に示すように、変数 x、y、z をカプセル化するために var('w') を使用しようとしています。これにより、f(x,y,z) の代わりに f(w) と言うことができます。複数の数式がある場合に非常に便利です。問題は、w を初めて使用した後、「w」にリセットされることです。

wを「x、y、z」に継続的に再割り当てする以外に、定数を設定する方法はありますか? Python の Web ページの仕様によると、そのようには見えません。

PSとして、この問題に対する私の解決策は、不器用に思えます。私は学生ではありませんが、現在利用可能なテクノロジーに驚いている 40 代のオタクです。だから私には、助けを求めるTAも教授も仲間の学生もいません。

私の解決策...

1) 別の変数を定義します:
v=var('v')
v=(x,y,z)

2) 関数 f(x)、g(x)、h(x) を実行するたびに、値 w=v を再割り当てします。

ありがとう、レオ

** *コード* ** *

x=var('x')
y=var('y')
z=var('z')
w=var('w')

w=(x,y,z); print(w) #prints out 'x,y,z'

f(w) = ((2*x - y + 0*z)==0); print(w) #prints out 'w'
g(w) = ((-x + 2*y - z)==-1); print(w) #prints out 'w'
h(w) = ((0*x - 3*y + 4*z)==4); print(w) #prints out 'w'

solve((f(w), g(w), h(w)), w)) #returns errors since it needs to be 
#solved in x,y,z, not w
4

1 に答える 1

1

w=var('w'): w は、'w' という名前のシンボル オブジェクトです。

w=(x,y,z): w は 3 つのシンボル オブジェクトのタプルです。このタプルを使用して式関数を定義するには、「*」を使用してタプルをアンパックします: w==(x,y,z) の場合、f(*w) は f(x,y,z) と同じです。

したがって、次のコードは solve() を正しく実行します。

x=var('x')
y=var('y')
z=var('z')

w=(x,y,z)

f(*w) = (2*x - y + 0*z)==0
g(*w) = (-x + 2*y - z)==-1
h(*w) = (0*x - 3*y + 4*z)==4

solve((f,g,h), w)
于 2011-08-29T07:09:24.600 に答える