mathematica如何定义动态矩阵

 我来答
若以下回答无法解决问题,邀请你更新回答
xzcyr
2013-06-10 · TA获得超过3401个赞
知道大有可为答主
回答量:1400
采纳率:100%
帮助的人:682万
展开全部
……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


本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式