sage中矩阵元素的条件定义
Conditional definition of matrix elements in sage
在 Sage 中,尝试通过以下方式定义具有单元格条件的矩阵:
matrix([[(if gcd(i, j) == 0: log(radical((i+j)*i*j)) else: -1.0) for j in srange(1, 5)] for i in srange(1, 5)])
我收到一个语法错误:
...
matrix([[(if gcd(i, j) == _sage_const_0 : log(radical((i+j)*i*j)) else: -_sage_const_1p0 ) for j in srange(_sage_const_1 , _sage_const_5 )] for i in srange(_sage_const_1 , _sage_const_5 )])
^
SyntaxError: invalid syntax
这里有什么问题?如何解决?
你的问题是 Python 一个,真的,不是 Sage 本身。 Python 对列表理解有一些过滤,但它看起来不像这样。参见例如this question.
所以let's try it:
matrix([[log(radical((i+j)*i*j)) if gcd(i,j)==0 else -1.0 for j in srange(1,5)] for i in srange(1,5)])
对了,你真的想要if gcd(i,j)==1
吗?你不太可能在这个中获得零 gcd!
还有一种可能。
sage: f = lambda i, j: log(radical((i + j)*i*j)) if gcd(i,j) == 1 else -1
sage: m = matrix(SR, 4, lambda i, j: f(i + 1, j + 1))
sage: m
[ log(2) log(6) log(6) log(10)]
[ log(6) -1 log(30) -1]
[ log(6) log(30) -1 log(42)]
[log(10) -1 log(42) -1]
这对矩阵初始化使用了不同的语法,其中我们
首先指定基环、矩阵大小,然后是一个函数
(i, j)
的系数。请注意,由于 Sage 索引行和
来自 0
的列,我们必须将函数应用于 i + 1
和 j + 1
.
将 -1
用于非互质 (i, j)
可能比 -1.0
更有效
用于精确计算。
在 Sage 中,尝试通过以下方式定义具有单元格条件的矩阵:
matrix([[(if gcd(i, j) == 0: log(radical((i+j)*i*j)) else: -1.0) for j in srange(1, 5)] for i in srange(1, 5)])
我收到一个语法错误:
...
matrix([[(if gcd(i, j) == _sage_const_0 : log(radical((i+j)*i*j)) else: -_sage_const_1p0 ) for j in srange(_sage_const_1 , _sage_const_5 )] for i in srange(_sage_const_1 , _sage_const_5 )])
^
SyntaxError: invalid syntax
这里有什么问题?如何解决?
你的问题是 Python 一个,真的,不是 Sage 本身。 Python 对列表理解有一些过滤,但它看起来不像这样。参见例如this question.
所以let's try it:
matrix([[log(radical((i+j)*i*j)) if gcd(i,j)==0 else -1.0 for j in srange(1,5)] for i in srange(1,5)])
对了,你真的想要if gcd(i,j)==1
吗?你不太可能在这个中获得零 gcd!
还有一种可能。
sage: f = lambda i, j: log(radical((i + j)*i*j)) if gcd(i,j) == 1 else -1
sage: m = matrix(SR, 4, lambda i, j: f(i + 1, j + 1))
sage: m
[ log(2) log(6) log(6) log(10)]
[ log(6) -1 log(30) -1]
[ log(6) log(30) -1 log(42)]
[log(10) -1 log(42) -1]
这对矩阵初始化使用了不同的语法,其中我们
首先指定基环、矩阵大小,然后是一个函数
(i, j)
的系数。请注意,由于 Sage 索引行和
来自 0
的列,我们必须将函数应用于 i + 1
和 j + 1
.
将 -1
用于非互质 (i, j)
可能比 -1.0
更有效
用于精确计算。