mathematica如何定义动态矩阵
- 提问者网友:不爱我么
- 2021-04-22 20:55
- 五星知识达人网友:woshuo
- 2021-04-22 22:22
……Mathematica里没有也不需要这样的概念.你说说你想实现什么吧.
再问: 一个奇数阶矩阵,一圈是“*”,一圈是“0”,交错着的。用一个函数表示
再答: 唔……难点是逻辑构建呢……本来对于这个,Part有一种语法可以使用,结合递归(Nest之类)应该可以写出比较好的代码。但是我一时想不出好的递归逻辑,所以就用个偷懒但直观的翻译方法吧,反正这样也够快了,而且你也只是想知道矩阵的定义方法嘛:n = 31;
mat = ConstantArray["*", {n, n}];
mid = (1 + n)/2;
Set[Part[mat, ##], 0] & @@@
Select[Flatten[Table[{i, j}, {i, n}, {j, n}], 1],
OddQ[#[[1]]] && (mid - Abs@(mid - #[[1]]) <= #[[2]] <=
mid + Abs@(mid - #[[1]])) ||
OddQ[#[[2]]] && (mid - Abs@(mid - #[[2]]) <= #[[1]] <=
mid + Abs@(mid - #[[2]])) &];
mat // MatrixForm————————把递归式的想出来了。比上面的解法快50倍:n = 31;
mat = ConstantArray["*", {n, n}];
mid = (1 + n)/2;
mat[[mid, mid]] = 0;
i = 2;
Nest[(
mat[[mid - i, mid - i ;; mid + i]] = 0;
mat[[mid + i, mid - i ;; mid + i]] = 0;
mat[[mid - i + 1 ;; mid + i - 1, mid - i]] = 0;
mat[[mid - i + 1 ;; mid + i - 1, mid + i]] = 0; i += 2;) &, ,
1/4 (-2 - I^(1 + n) + n)];
mat // MatrixForm
再问: ...太强大了吧。。。