作业帮 > 综合 > 作业

mathematica如何定义动态矩阵

来源:学生作业帮 编辑:搜搜做题作业网作业帮 分类:综合作业 时间:2024/04/30 06:48:50
mathematica如何定义动态矩阵
mathematica如何定义动态矩阵
……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

再问: ...太强大了吧。。。