给定n值的向量,(x_1,x_2,x_3,\ldots,x_n)返回相应的范德蒙矩阵的行列式
V(x_1, x_2, \ldots, x_n) = \begin{bmatrix}1 & x_1 & x_1^2 & x_1^3 & \ldots &x_1^{n-1} \\1 & x_2 & x_2^2 & x_2^3 & \ldots &x_2^{n-1} \\ \vdots & & & \vdots & & \vdots \\ 1 & x_n & x_n^2 & x_n^3 & \ldots & x_n^{n-1}\end{bmatrix}。
这个行列式可以写成:
您的程序/函数必须接受允许可变长度的任何方便格式的浮点数列表,并输出指定的行列式。
您可以假设输入和输出都在语言支持的值的范围内。如果语言不支持浮点数,则可以假定整数。
注意,每当有两个相等的条目时,行列式将是0
,因为在相应的Vandermonde矩阵中有两个相等的行。感谢@randomra指出了这个缺失的测试案例。
[1,2,2,3] 0
[-13513] 1
[1,2] 1
[2,1] -1
[1,2,3] 2
[3,2,1] -2
[1,2,3,4] 12
[1,2,3,4,5] 288
[1,2,4] 6
[1,2,4,8] 1008
[1,2,4,8,16] 20321280
[0, .1, .2,...,1] 6.6586e-028
[1, .5, .25, .125] 0.00384521
[.25, .5, 1, 2, 4] 19.3798828
发布于 2016-03-04 21:14:41
œc2IP
œc2
不替换长度为2的所有组合,I
计算每对的差异列表,生成类似于[[1], [2], [3], ..., [1]]
的列表。我们用P
胶管。
在现代果冻中,Œc
是œc2
的一个简短形式,因此ŒcIP
是一个4字节的解决方案.
发布于 2016-03-04 22:04:47
1##&@@(#2-#&@@@#~Subsets~{2})&
这是一个匿名函数。
通过数学的扩展,它等价于(1 ##1 & ) @@ Apply[#2 - #1 & , Subsets[#1, {2}], {1}] &
。1##&
是Times
(谢提示页)的等效值,它应用于Subsets[list, {2}]
生成的输入列表中的每一对不同的元素。注意,Subsets
不检查元素的唯一性。
发布于 2016-03-04 21:24:41
!G-qZRQpp
在网上试试!
这将计算所有差异的矩阵,然后只将部分保持在主对角线以下,使其他条目1
,这样它们就不会影响产品。下三角函数使不需要的元素0
,而不是1
。所以我们减去1
,取下三角部分,再加上1
。然后我们可以得到所有条目的乘积。
t % take input. Transpose
G % push input again
- % subtract with broadccast: matrix of all pairwise differences
q % subtract 1
ZR % make zero all values on the diagonal and above
Q % add 1
p % product of all columns
p % product of all those products
https://codegolf.stackexchange.com/questions/74789
复制相似问题