0

昨天我开始玩 Sage,一个开源的计算机代数系统。Sage 使用 Python 将多个开源包绑定到一个编码接口中。

不幸的是,不仅 Sage 是新的,Python 也是如此。我今天大部分时间都在学习两者。我能说什么?曾经是书呆子,永远是书呆子......

当我开始研究多维向量系统时,问题就来了。

正如您在下面看到的,我正在尝试使用 var('w') 来封装变量 x、y、z。这将允许我说 f(w) 而不是 f(x,y,z)。当你有多个方程时真的很方便。问题是,在我第一次使用 w 后,它会重置为“w”。

除了不断地将 w 重新分配给“x,y,z”之外,还有什么方法可以设置一个常数?根据 Python 网页上的规范,它看起来不像。

作为一名 PS,我对这个问题的解决方案让我觉得有点笨拙。我不是学生,而是一个 40 多岁的书呆子,对当今可用的技术感到惊讶。所以我没有助教、教授或同学寻求帮助。

我的解决方案...

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 是三个符号对象的元组。要使用该元组定义表达式函数,可以使用“*”解包元组:f(*w) 与 f(x,y,z) 相同,当 w==(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 回答